在AS3中放置事件监听器的最佳位置

时间:2015-04-17 07:36:05

标签: actionscript-3 events state

在我的项目中,我有一个主要的.as定义了一个类。

在课堂上我有各种其他对象作为成员。其中一个包含有关应用程序状态的信息,我将其注入其他课程,以便他们都知道发生了什么。

状态类还会在事情发生变化时调度自定义事件。

我的问题是,做这样的事情是不好的:

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
    }

}

我喜欢这种方式,但我不确定它是否会在以后回来咬我。这是一个好方法吗?

2 个答案:

答案 0 :(得分: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]);
        }
    }

}

答案 1 :(得分:0)

是的,事件系统本身或多或少地创建了观察者模式。 (也就是说,一个对象观察另一个对象的变化)

基于观察者模式是MVC模式,它几乎是每种应用程序的基础。

其中一部分是V,view,观察M,model进行更改。 在您的情况下,appState可以是modelSomeClass可以是view(其中一类)。为了观察modelview会收到对model对象的引用。这通常完全按照您的方式完成。

请记住,不要强迫任何模式。上面的要点是告诉你,将一个observable传递给类似的类是很常见的。但是,这并不意味着它在您的情况下一定是正确的选择。 (这很可能是正确的选择,只是不要认为这样做本身就是正确的选择)

在销毁appState对象时,不要忘记清除对SomeClass的引用。