javascript - ExtJS 中 Controller 的职责是什么? Ext.window.Window 实例中的事件?

标签 javascript extjs extjs4 extjs4.2 extjs5

当前使用 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/

相关文章:

javascript - 从 JavaScript Promise 回调主体外部访问数据时出错

ExtJS 4 : Excel-style keyboard navigation in an editable Grid

Extjs4,如何在组合编辑器中设置displayField?

extjs - 如何在 ExtJS 4 中覆盖分页工具栏的下一个和上一个按钮

javascript - ExtJS ComboBox下拉宽度比输入框宽度宽?

javascript - 按多个属性对数组中的对象进行排序

javascript - Raphael element.animate(...) - 指定在动画的每一步执行的回调

javascript - PHP 中的 onclick JavaScript

extjs - 使用 Ext JS 进行快速开发

ios - 是否可以在 Windows 中开发,然后在 Mac 中使用 Cordova/PhoneGap 或 Sencha Touch 生成应用程序