在 AS3 中放置事件侦听器的最佳位置
Best place to put event listener in AS3
在我的项目中,我有一个 main .as 定义了一个 class.
在 class 中,我有各种其他对象作为成员。其中一个包含有关应用程序状态的信息,我将其注入其他 classes 以便他们都知道发生了什么。
状态 class 也会在事情发生变化时调度自定义事件。
我的问题是,这样做不好吗:
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
}
}
我喜欢这种方式,但我不确定它以后是否会回来咬我。这是一种可行的方法吗?
你可以使用回调代替eventListeners,这样会更快。
在您的 AppState class 中,您将设置一个数组来保存回调函数,并在更新时调用它们。
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]);
}
}
}
是的,这样的事件系统或多或少地创建了观察者模式。
(即一个对象观察另一个对象的变化)
基于观察者模式的是 MVC 模式,它以某种方式成为几乎所有应用程序的基础。
其中一部分是 V,view
,它观察 M,model
的变化。
在您的情况下,appState
可能是 model
,SomeClass
可能是 view
(其中 class)。为了观察 model
,view
接收到对 model
对象的引用。这通常完全按照您的方式完成。
请记住,永远不要强行使用任何模式。上面的要点是告诉你像这样将一个可观察对象传递给一个 class 是很常见的。但是,这并不意味着它一定是您所处情况的正确选择。 (这很可能是正确的选择,只是不要认为这样做本身就是正确的选择)
销毁 SomeClass
对象时不要忘记清除对 appState
的引用。
在我的项目中,我有一个 main .as 定义了一个 class.
在 class 中,我有各种其他对象作为成员。其中一个包含有关应用程序状态的信息,我将其注入其他 classes 以便他们都知道发生了什么。
状态 class 也会在事情发生变化时调度自定义事件。
我的问题是,这样做不好吗:
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
}
}
我喜欢这种方式,但我不确定它以后是否会回来咬我。这是一种可行的方法吗?
你可以使用回调代替eventListeners,这样会更快。
在您的 AppState class 中,您将设置一个数组来保存回调函数,并在更新时调用它们。
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]);
}
}
}
是的,这样的事件系统或多或少地创建了观察者模式。 (即一个对象观察另一个对象的变化)
基于观察者模式的是 MVC 模式,它以某种方式成为几乎所有应用程序的基础。
其中一部分是 V,view
,它观察 M,model
的变化。
在您的情况下,appState
可能是 model
,SomeClass
可能是 view
(其中 class)。为了观察 model
,view
接收到对 model
对象的引用。这通常完全按照您的方式完成。
请记住,永远不要强行使用任何模式。上面的要点是告诉你像这样将一个可观察对象传递给一个 class 是很常见的。但是,这并不意味着它一定是您所处情况的正确选择。 (这很可能是正确的选择,只是不要认为这样做本身就是正确的选择)
销毁 SomeClass
对象时不要忘记清除对 appState
的引用。