舉例 :
onClick
onKeyDown
beforeMouseDown
onMouseDown
afterMouseDown
只在對象為 this 時作 Event 轉 Signal
用 CJSignal 舉例 :
假設原先的 code 是這樣
public class Button extends Sprite { } public class Panel extends Sprite { private var button:Button = new Button(); public function Panel(){ button.addEventListener(MouseEvent.CLICK, function():void{ this.dispatchEvent(new Event("onButtonClick")); }); } }
改法1:
像這樣直接把 addEventListener 改成 signal 的作法不好
public class Button extends Sprite { } public class Panel extends Sprite { private var button:Button = new Button(); public var onButtonClick:NativeSignal = new NativeSignal(button, MouseEvent.CLICK); }
改法2:
應該這樣做
public class Button extends Sprite { public onClick:NativeSignal = new NativeSignal(this, MouseEvent.CLICK); } public class Panel extends Sprite { private var button:Button = new Button(); public function get onButtonClick():NativeSignal{ return button.onClick; } }
這是因為 button 可能會被 new 一次以上
如果用改法1的寫法
會產生多餘的 Signal 物件
也會造成程式碼重複