2015-04-17 37 views
0

在我的項目中,我有一個主.as,它定義了一個類。在AS3中放置事件監聽器的最佳位置

在課堂上,我有各種其他對象作爲成員。其中一個包含有關應用程序狀態的信息,我將其注入其他類,以便他們都知道發生了什麼。

當事情發生變化時,狀態類還會分派自定義事件。

我的問題是,是不是不好做這樣的事情:

public class SomeClass { 

    private var appState:AppState; 

    public function SomeClass(appState:AppState) { 
     this.appState = appState; 
     this.appState.addEventListener(AppState.INFO_UPDATE, this.appStateUpdated); 
    } 

    private function appStateUpdated(e:Event) { 
     //do something with new appstate 
    } 

} 

我喜歡這樣,但我不知道這是否會回來後咬我。這是一個好方法嗎?

回答

0

是,事件系統,因此是或多或少創建觀察者模式。 (也就是說,一個對象觀察另一個對象的變化)

基於觀察者模式是MVC模式,它是幾乎每種應用程序的基礎。

其中的一部分是V,view,它觀察M,model的變化。 在你的情況下,appState可能是modelSomeClass可能是view(其一類)。爲了觀察modelview收到對model對象的引用。這通常完全按照你的方式來完成。

請記住,你不應該強制任何模式。上面的要點是告訴你,將一個可觀察對象傳遞給這樣的類是非常普遍的。但是,這並不意味着它在你的情況下必然是正確的選擇。 (它很可能是正確的選擇,只是不認爲這樣做本身就是正確的選擇)

當銷燬一個SomeClass對象時,不要忘記清除對appState的引用。

0

您可以使用回調而不是eventListeners,它會更快。

在您的AppState類中,您將設置一個數組來保存回調函數,並在更新時調用它們。

public class AppState 
{ 
    private var callbacks:Array = []; 

    public function addCallback(update:function):void 
    { 
    } 

    public function removeCallback(update:function):void 
    { 
    } 

    public function update():void 
    { 
     for each (var callback:Function in callbacks) 
     { 
      callback.apply(null, [//maybe some param here]); 
     } 
    } 

}

+0

我的問題是關於在課堂上設置事件監聽器。如果我用回調做了。在我的SomeClass中,我仍然需要像AppState.addCallback(無論);這就是我所問的 - 無論是指定回調還是事件,或者其他相關類中的內容,都不是一個好主意。 –