当前使用 ExtJS 4,我正在尝试使用 Controller 来实现所有事件,但我正在窗口本身处理一些事件,即关闭和销毁事件。我需要在这里执行一些代码。
这是不好的做法吗?如果事件发生在 Window(Ext.window.Window 的实例)中。
我应该将这些事件转发给 Controller 来处理吗?
我不确定执行此操作的正确方法,但我想我必须从其事件中的“窗口”获取对 Controller 的引用,然后在 Controller 上调用 fireEvent?
这里的最佳实践是什么?
我使用的是 ExtJS 4.2,因此无法使用 MVVM。
ExtJS 似乎让我直接在“组件”中实现事件,但遵循 MVC 模式,这不是坏习惯吗?一切都应该真正通过 Controller 。
最佳答案
Controller 或视口(viewport)应该处理该事件。 您不需要对窗口内的 Controller 的引用。
如果您想要自定义事件,则需要从窗口内部触发事件,例如:
this.fireEvent("myCustomEvent"[,elementThatTriggeredTheEvent]);
然后您需要使用对窗口的引用来监听 Controller 内的事件:
yourWindow.on("myCustomEvent",this.myCustomEventHandler[,scope]);
还有一些方法可以在不引用事件触发元素的情况下监听事件。
编辑 - 关于您的评论:
如果您需要对窗口内的元素进行布局后的操作,那么我会在窗口内进行。如果您想对窗口内未定义的元素执行操作,请让实例化元素的 Controller 来处理它。在 ExtJS 5 中,有一个叫做 ViewController 的东西。不知道4.2有没有。您可以利用 ViewController 来分割窗口中发生的事情。这是一个链接:
https://www.sencha.com/blog/using-viewcontrollers-in-ext-js-5/
编辑2:
如果您不需要自定义事件,只需使用 Controller 监听窗口在重要场合已经抛出的事件即可。
关于javascript - ExtJS 中 Controller 的职责是什么? Ext.window.Window 实例中的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526091/