目前使用ExtJS 4,我试图使用控制器来实现所有事件,但有一些事件,我正在处理的窗口本身,这是关闭和销毁事件。我需要在这里执行一些代码
这种做法不好吗?如果事件发生在窗口(Ext.window.Window的一个实例)。
我应该把这些事件转发给控制器来处理吗?
我不确定这样做的正确方式,但我认为我必须从我的"窗口"在它的事件,然后调用控制器上的fireEvent对控制器的引用?
这里的最佳实践是什么?
我正在使用ExtJS 4.2,所以不能使用MVVM。
ExtJS似乎让我实现的事件直接在"组件",但以下MVC模式,这是不是不好的做法,一切都应该真正通过控制器
控制器或视口应该处理事件。你不需要在窗口中引用控制器。
如果你想要自定义事件,你需要从窗口内部触发事件,像
this.fireEvent("myCustomEvent"[,elementThatTriggeredTheEvent]);
然后你需要使用对窗口的引用来监听控制器内部的事件:
yourWindow.on("myCustomEvent",this.myCustomEventHandler[,scope]);
还有一些方法可以在不引用事件触发元素的情况下监听事件。
编辑-关于您的评论:
如果你需要在afterlayout上做一些关于窗口内元素的事情,那么我会在窗口内做。如果你想对没有在窗口中定义的元素做一些事情,那么让实例化元素的控制器来处理它。在ExtJS 5中有一个叫做ViewController的东西。我不知道它是否已经在4.2了。你可以利用ViewController来拆分发生在你窗口中的东西。这里有一个链接:
https://www.sencha.com/blog/using-viewcontrollers-in-ext-js-5/编辑2:
如果您不想要自定义事件,只需与控制器一起侦听窗口已经在重要场合抛出的事件