Обработка нескольких событий от одного слушателя - PullRequest
2 голосов
/ 18 августа 2011

Я хочу иметь одного прослушивателя событий для нескольких событий и в зависимости от
тип события, которое я хочу обработать отдельно.

Что-то похожее на Swiz framework см. «Обработка нескольких событий одним методом»

У меня есть кусок кода, как

     var toolOptions:UIComponent=ToolOptions.createToolOptions(type);
            if (options != null)
            {
                options.addEventListener(Event.SELECT,toolOptionSelectedHandler);
                someViewComponent.addOptions(toolOptions);
            }

   // handle depending on event type
    private function toolOptionSelectedHandler(event:*):void
    {
        //handle depending on type of event fired
        // type cast  event depending on type and  retrieve VO from event 
        //and send handle it..

        //SomeToolObj.handle(event.VO);    

    }

Выше toolOptions - это компонент mxml, который создается динамически на основе
'Тип'.

Также, какой тип события должен отправлять событие из компонента? Например: Event.SELECT

Чтобы быть более точным, вышесказанное в основном требуется для панели инструментов.
Когда пользователь выбирает инструмент, ему показываются опции для инструмента, а когда он выбирает опции,
Инструмент должен применить их к объекту на виде.

Есть ли лучший способ сделать то же самое?

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Вот что я понимаю:

У вас есть разные инструменты. У каждого из инструментов есть список опций. Вы щелкаете опцию, и один обработчик событий должен выполнять некоторые действия в зависимости от опции.

object on the view 1 : n tools 1 : n options

Создайте пользовательское событие OptionEvent.SELECT со свойством optionType.

public class OptionEvent extends Event {
    public static const SELECT : String = "optionEvent_select";
    public var optionType : String;
    public function OptionEvent(type : String) {
        super(type, true); // bubbles
    }
}

Когда пользователь выбирает опцию, отправьте событие следующим образом:

var event : OptionEvent = new OptionEvent(OptionEvent.SELECT);
event.optionType = "border";
dispatchEvent(event);

Слушайте событие, как вы:

var toolOptions:UIComponent=ToolOptions.createToolOptions(type);
if (options != null) {
    options.addEventListener(OptionEvent.SELECT,toolOptionSelectedHandler);
    someViewComponent.addOptions(toolOptions);
}

Различают тип опции, определяя тип опции:

private function toolOptionSelectedHandler(event : OptionEvent) : void {
     var optionType = event.optionType;
     switch (optionType) {
         case "border":
             addBorderToView();             
             break;
         case "rotation":
             rotateView();             
             break;
     }
}

ОБНОВЛЕНИЕ - Как настроить список значений параметров в OptionEvent:

public class OptionEvent extends Event {
    public static const SELECT : String = "optionEvent_select";
    public var optionType : String;
    private var _optionValues : Object;

    public function OptionEvent(type : String) {
        _optionValues = new Object();
        super(type, true); // bubbles
    }

    public function setOptionValue(property : String, value : *) : void {
        _optionValues[property] = value;
    }

    public function getOptionValue(property : String) : * {
        return _optionValues[property];
    }
}
2 голосов
/ 18 августа 2011

Вы также можете попробовать что-то вроде этого: http://blog.iconara.net/2008/03/30/separating-event-handling-from-event-filtering/

, и я нашел решение, с которым мне немного удобнее, используя цепочку ответственности со ссылками, которые имеют отдельныйметоды meetResponsibility, где данные конкретного события сохраняются при создании ссылки.Если мы находим соответствие между этим и событием, которое передается в цепочку, то мы вызываем meetResponsibility.В противном случае мы вызываем следующую ссылку в цепочке.

Для получения дополнительной информации о COR, ознакомьтесь с http://www.as3dp.com/2008/01/14/actionscript-30-chain-of-responsibility-design-pattern-decoupling-request-and-request-handler/

...