2012-02-10 28 views
4

我正在使用RobotLegs和Signals來處理我的應用程序。這是我第一次使用Robotlegs和Im使用Joel Hooks信號命令映射example hereAS3機器人腿和信號 - 使用信號,非常詳細,任何選擇?

我注意到它與事件形成鮮明對比。對於每一個信號,我都必須創建一個新類,而對於事件,我會將事件類型分組到一個類中。

我喜歡這種視覺和即時描述。只是瀏覽一個信號包將會顯示所有的應用程序通信。雖然它對我來說似乎非常冗長。

其他人使用這種方式,我使用這種信號的方式是否正確,或讓人們找到解決這種冗長的方法?

乾杯

回答

1

雖然這是正確的方法。信號的主要優點是你可以將它們包含在你的接口定義中,但顯然你會得到一大堆信號。

一般來說,我只使用信號用於我的視圖 - >中介和服務 - >命令通信(1對1)。對於系統範圍的通知,我使用事件(n對n)。它使信號的數量更易於管理。 但這顯然是一個偏好問題。

使用良好的IDE和/或模板系統減輕了創建各種信號的許多「痛苦」。

0

不必爲爲Command地圖創建一個新的信號類,它只是一個很好的練習。你可以給「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並添加一個新的靜態常量來表示事件。很像你(可能?)在使用Event對象時所做的。

0

對於每個信號,我必須創建一個新類,而事件I 會將事件類型分組到一個類中。

而不是做,你可以只使用信號作爲屬性...類似的:

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

你能想到的一個信號作爲對象/接口的屬性。

在Joel的例子中,他使用信號來表示系統級事件,並將它們映射到robotlegs SignalMap,它按照類型映射信號。由於它們按類型映射,因此需要爲每個系統級信號創建一個唯一類型。