Всякие разные штуки сомнительной полезности сделанные в свободное от работы время.
Система сигнал-слот в AS3
Продолжительные попытки оптимизировать работу событий в AS3 привели к написанию этой небольшой библиотеки.
В чем заключаются отличия от штатного EventDispatcher и Event.
- Вызов колбека (хендлера, он же слот) не сопровождается созданием нового, зачастую не нужного объекта - события.
- Типы "событий" заранее извесны, никаких "непредвиденых событий" объекты диспатчить не могут. Аналогично, нельзя подписаться на несуществующее "событие".
- Колбеку можно задать типы и количество принимаемых параметров.
- Реализация аналогов target, currentTarget, stopPropagation, handled оставлена "на откуп" программисту использующему библиотеку т.е. захотите - добавьте.
- Аналог useCapture не возможен в силу специфики реализации.
Не стоит пытаться заменить нативные события, т.как это будет явно непродуктивно. Ну и не стоит использовать в небольших проектах, в которых количество вещаемых событий не на столько велико, чтобы повлиять на продуктивность. Возможно, не до конца идеально продумана реализация (на уровне интерфейса), так что возможны доработки.
Пример использования:
package signals { //{ imports import flash.display.Sprite; import org.wvxvws.signals.ISemaphore; import org.wvxvws.signals.SignalError; import org.wvxvws.signals.Signals; //} /** * TestAsteriscNamespace class. * @author wvxvw * @langVersion 3.0 * @playerVersion 10.0.32 */ public class SignalsExample extends Sprite implements ISemaphore { //-------------------------------------------------------------------------- // // Public properties // //-------------------------------------------------------------------------- public static const FOO:Vector.<Class> = new <Class>[int]; public static const BAR:Vector.<Class> = new <Class>[String, int]; /* INTERFACE org.wvxvws.signals.ISemaphore */ public function get signals():Signals { return this._signals; } //-------------------------------------------------------------------------- // // Protected properties // //-------------------------------------------------------------------------- protected var _signals:Signals; //-------------------------------------------------------------------------- // // Constructor // //-------------------------------------------------------------------------- public function SignalsExample() { super(); this._signals = new Signals(this); this._signals.add(FOO, this.slotTest3); this._signals.add(BAR, this.slotTest); this._signals.add(BAR, this.slotTest2); this._signals.call(BAR, "Foo", 100); this._signals.call(FOO, 200); try { this._signals.call(FOO, "Foo", 100); } catch (error:SignalError) { // Attempting to call slot with wrong signature. trace(error.message); } } //-------------------------------------------------------------------------- // // Public methods // //-------------------------------------------------------------------------- /* INTERFACE org.wvxvws.signals.ISemaphore */ public function signalTypes():Vector.<Vector.<Class>> { return new <Vector.<Class>>[FOO, BAR]; } //-------------------------------------------------------------------------- // // Private methods // //-------------------------------------------------------------------------- private function slotTest(par0:String, par1:int):void { trace("slotTest called", par0, par1); } private function slotTest2(par0:String, par1:int):void { trace("slotTest2 called", par0, par1); } private function slotTest3(par1:int):void { trace("slotTest3 called", par1); } } }
http://code.google.com/p/e4xu/source...wvxvws/signals
EDIT: Немножко упростил и почистил АПИ.
Всего комментариев 61
Комментарии
13.07.2010 15:56 | |
Нет. Ты создал класс кототый диспатчит BlooDHounDEven.FOO, я его расширил и добавил WVXVWEvent.FOO - подписался на свое событие, а получил твое.
|
13.07.2010 16:51 | |
Ну так это и есть плохая типизация / отсутствие проверки во время компиляции. А так все ошибки в программах происходят по вине тех, кто их пишет.
|
13.07.2010 17:00 | |
wvxvw, ну так такого рода ошибок и для сигналов можно насобирать целый паровоз.
|
13.07.2010 17:32 | |
wvxvw, боюсь, что это не так. на сим удаляюсь кататься на велосипедах.
|
14.07.2010 16:31 | |
Ап чем спор-то, господа? Я не уловил.
|
Последние записи от wvxvw
- Dired - текстовый проводник по файловой системе (29.06.2013)
- Навигация по HTML с WASD (09.06.2012)
- JavaScript, все не так плохо (07.06.2012)
- Что такое tarball и чем его пакуют (11.04.2012)
- Критика Presentation Model (18.02.2012)