2012/5/24

從 Event 改寫為 Signal 的注意事項

Signal 的命名採用[發生時間+主詞+動詞]
舉例 :
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 物件
也會造成程式碼重複

沒有留言: