AS3机器人腿和信号 - 使用信号,相当冗长,任何替代品?

时间:2012-02-10 12:04:40

标签: robotlegs actionscript-3

我正在为我的应用程序使用RobotLegs和Signals。这是我第一次使用Robotlegs,我正在使用Joel Hooks Signal Command Map example here

我注意到与事件相比,它似乎相当冗长。对于每个Signal,我必须创建一个新类,而对于事件,我会将事件类型分组到一个类中。

我喜欢这种直观和即时描述的方式..只需浏览信号包即可显示所有应用通讯。虽然对我来说似乎很啰嗦。

其他人是否正在使用此功能,我使用这样的信号的方式是正确的,还是让人们找到解决这种冗长问题的方法?

干杯

3 个答案:

答案 0 :(得分:1)

这是正确的方法。信号的主要优点是你可以将它们包含在你的界面定义中,但显然你最终会得到一大堆信号。

一般情况下,我仅将信号用于我的view-> mediator和service->命令通信(1对1)。对于系统范围的通知,我使用事件(n到n)。它使信号的数量更易于管理。 但显然这是一个偏好问题。

使用一个好的IDE和/或模板系统可以减轻许多必须创建各种信号的“痛苦”。

答案 1 :(得分:0)

没有为Command map创建一个新的信号类,这是一个很好的做法。你可以给“dataType”类一个类型属性 - 并对其进行switch。但这对命令来说会很混乱。但请注意,命令基本上用于触发应用程序范围的操作。

并非所有信号都会触发应用程序范围的操作。

例如,如果您要响应来自单个View的一堆事件。我建议为相关的“观看事件”制作Signal课程(例如MyButtonSignalMyButtonView)并为其提供类型属性。

我的典型信号如下:

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并添加一个新的静态const来表示事件。就像你(可能是?)在使用Event对象时那样。

答案 2 :(得分:0)

  

对于每个信号,我必须创建一个新类,而对于事件我   将事件类型分组为一个类。

而不是这样做你可以将信号用作财产......如:

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

您可以将信号视为对象/接口的属性。

在Joel的例子中,他使用信号来表示系统级事件,并将它们与机器人信号映射一起映射,SignalMap按类型映射信号。因为它们是按类型映射的,所以需要为每个系统级信号创建唯一类型。