Ножки робота AS3 и сигналы - Использование сигналов, довольно многословно, есть ли альтернативы? - PullRequest
4 голосов
/ 10 февраля 2012

Я использую RobotLegs и сигналы для моего приложения. Я впервые использую Robotlegs, и я использую карту команд сигналов Джоэла Хукса пример здесь

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

Мне нравится, насколько это наглядно и наглядно ... просто просмотр пакета сигналов покажет все коммуникации приложения. Хотя мне это кажется довольно многословным.

Используют ли это другие люди, правильно ли я использую сигналы, подобные этому, или люди нашли способ обойти эту многословность?

Приветствия

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Хотя это правильный путь.Основным преимуществом сигналов является то, что вы можете включить их в определения интерфейса, но, очевидно, вы получите большую кучу сигналов.

Как правило, я использую сигналы только для связи между моим представлением -> посредник и обслуживание -> (1-к-1).Для системных уведомлений я использую события (n-to-n).Это делает количество сигналов более управляемым.Но, очевидно, это вопрос предпочтений.

Использование хорошей IDE и / или системы шаблонов облегчает большую часть "боли" необходимости создавать различные сигналы.

0 голосов
/ 13 марта 2013

Для каждого Сигнала мне нужно создать новый класс, тогда как с событиями я бы сгруппировал типы событий в один класс.

Вместо этого вы можете просто использовать сигнал каксвойство… что-то вроде:

public var myCustomSignal:Signal = new Signal(String,String);

Вы можете рассматривать сигнал как свойство вашего объекта / интерфейса.

В примере Джоэла он использует сигналы для обозначения событий системного уровня и отображает ихс Roblegs SignalMap, который отображает сигналы по типу.Поскольку они отображаются по типу, вам необходимо создать уникальный тип для каждого сигнала системного уровня.

0 голосов
/ 09 марта 2012

Вам не нужно создавать новый класс сигналов для командных карт, это просто хорошая практика. Вы можете просто дать классу «dataType» свойство типа - и сделать для этого switch. Но это было бы грязно для команд. Но обратите внимание, команды в основном предназначены для запуска действий всего приложения.

Не все сигналы запускают действия всего приложения.

Например, если вы отвечаете на кучу событий из одного View. Я предлагаю создать класс Signal для связанных «событий просмотра» (например, MyButtonSignal для MyButtonView) и присвоить ему свойство типа.

Типичный мой сигнал будет выглядеть так:

package {
    public class MyButtonSignal extends Signal {
        public static const CLICK:String = 'myButtonClick';
        public static const OVER:String = 'myButtonOver';

        public function MyButtonSignal() {
             super(String, Object);
        }
    }
}

Отправка вроде так

myButtonSignal.dispatch(MyButtonSignal.CLICK, {name:'exit'});

Слушай как обычно:

myButtonSignal.add(doMyButtonSignal);

Обрабатывать сигнал так:

    protected function doMyButtonSignal(type:String, params:Object):void {
        switch(type) {
            case MyButtonSignal.CLICK: trace('click', params.name);         
                break;


            case MyButtonSignal.OVER: trace('OVER', params.name);           
                break;
        }
    }

Иногда полезно присвоить переменной data собственный класс данных.

Таким образом, каждый раз, когда вы понимаете: «Черт, мне нужно реагировать на другое событие», вы просто переходите к Signal и добавляете новый статический констант для представления события. Так же, как вы (вероятно?), Когда использовали Event объекты.

...