PDA

Просмотр полной версии : Как правильно создать событие пользовательскому классу.


this.create
02.08.2007, 21:33
Вопрос именно в методике создания. Прочитав несколько обсуждений по этой теме на форуме пришел к выводу, что необходимо использовать класс EventDispatcher или AsBroadcaster.

Немного поэксперементировав сделал другой вариант, рабочий, но упомянутые выше классы не понадобились.
Изначально мне было нужно, чтобы у класса было событие, которое срабатывало бы по окончании некоторого действия, начатого классом( двухступенчатая загрузка). Вот, что получилось:
//класс
//
class Test {
public function Test() {
}
//
public function preLoad():Void {
/*
здесь выполняются некоторые действия время окончания которых неизвестно затем вызывается метод onLoad
*/
onLoad();
}
//
//пустой метод
public function onLoad():Void {
}
}

Использование:
import mx.utils.Delegate;
//
var test:Test = new Test();
//
test.onLoad = Delegate.create(this, this.Do);
function Do():Void {
trace(this); //_level0
}
//
test.preLoad();

Я подозреваю, что метод этот не соответствует правильному стилю программирования в AS2. Не могли бы вы прокомментировать его (какие недостатики, "подводные камни")?

lowka
02.08.2007, 22:40
1) Добавить можно только 1 обработчик.
2) Такой способ не может отразить состояние события. //Вру. Можно :)

etc
02.08.2007, 22:40
А почему у вас имя функции похоже на имя класса?
Подход неверный, в общем-то. Вы жестко связываете класс и метод.
EventDispatcher и AsBroadcaster созданы для того чтобы связь между классами была нежесткой.

this.create
03.08.2007, 02:34
А почему у вас имя функции похоже на имя класса? class Test {
public function Test() {
}
//
public function preLoad():Void {
/*
здесь выполняются некоторые действия время окончания которых неизвестно затем вызывается метод onLoad
*/
onLoad();
}
//
//пустой метод
public function onLoad():Void {
}
} Если вы про эту строчку, то это у меня пустой конструктор.

Kikasso
03.08.2007, 02:41
В классе:
public var onLoad:Function = null;
а потом переопределяйте.
А вообще лучше геттер-сеттер организовать.

this.create
03.08.2007, 02:48
В классе:
public var onLoad:Function = null;
Это лучше? Чем?

А вообще лучше геттер-сеттер организовать.
Напишите пример пожалуйста. И объясните, чем лучше.

etc
03.08.2007, 09:58
Если вы про эту строчку, то это у меня пустой конструктор.
Нет, я не про класс говорю.
Я говорю про функцию «Do».

Ничего не надо переопределять, никаких геттеров/сеттров и прочей фигни. В AS1 было приняты конструкции myObj.onRelease = function() …, в AS2 их лучше заменить на EventDispatcher.

CrazyFlasher
03.08.2007, 11:42
использовать EventDispatcher

this.create
03.08.2007, 15:35
В классе:
public var onLoad:Function = null; а потом переопределяйте. Спасибо. С этим видом записи разобрался. :)

использовать EventDispatcher
Я уже сделал с использованием EventDispatcher. Просто интересны были методики создания.