视图中的处理与控制器Extjs中的处理

视图中的处理与控制器Extjs中的处理,extjs,model-view-controller,Extjs,Model View Controller,在处理extjs MVC项目时,我们可以在视图或控制器内部处理视图事件。我们如何决定在视图中处理了哪些事件以及在控制器中处理了哪些事件。最佳实践是什么 例如,我需要在单击按钮时弹出一个窗口。窗口的创建应该转到控制器还是驻留在容器视图对象中。可以做的一件事是在控制器定义中使用control()方法。例如,以这段代码为例 Ext.define('AM.controller.Users', { extend: 'Ext.app.Controller', init: function() {

在处理extjs MVC项目时,我们可以在视图或控制器内部处理视图事件。我们如何决定在视图中处理了哪些事件以及在控制器中处理了哪些事件。最佳实践是什么


例如,我需要在单击按钮时弹出一个窗口。窗口的创建应该转到控制器还是驻留在容器视图对象中。

可以做的一件事是在控制器定义中使用control()方法。例如,以这段代码为例

Ext.define('AM.controller.Users', {
extend: 'Ext.app.Controller',

init: function() {
    this.control({
        'viewport > panel': {
            render: this.onPanelRendered
        },
        '#editform button[action=save]': {
            click: this.onClick
        }
    });
}
});

这来自MVC示例。您会注意到,它使用ComponentQuery语言()选择一组Ext对象来分配
render()
事件。也就是说,对于视口中的所有面板,调用
onPanelRendered()
以获得
render()
事件。因此,在您的情况下,您需要选择一些按钮。因此,我添加了另一个示例,选择id为
editform
的表单,然后选择包含属性
action=save
的按钮。您可以通过这些组件查询获得非常具体的信息。我建议阅读API的ComponentQuery部分以查看更多示例。这取决于您尝试选择按钮的方式。

如果您是MVC新手,您可能只应该在控制器中收听事件,一旦您开发了两个项目,并且获得了纪律并享受了在控制器中收听事件的好处,那么您就可以将其混合起来(何时使用处理器以及何时使用控制器将变得显而易见)

例如,如果你有一个FormPanel,你只听一个按钮的点击,也许仅仅为此创建一个控制器没有多大意义,但另一方面,如果你有一个带有工具栏、动作按钮、项目点击等的网格,那么最好为该视图创建一个控制器

使用MVC并不意味着不再允许您使用处理程序,而是明智地使用。


致以最诚挚的问候。

您查看过ExtJS MVC示例吗?如果您没有,我建议您仔细阅读一下。它提供了一个简单但有用的示例。非常感谢您的评论。我查看过,我的问题是,当我的视图中存在大量类似的按钮处理程序时,是否最好将它们全部移动到控制器。正如我们通常所说的那样视图中的那些处理程序,如果我没有错的话。例如,当单击按钮时,我需要弹出一个窗口。该窗口的创建应该转到控制器还是驻留在容器视图对象中。非常感谢。这非常有用。此外,您建议将所有按钮处理放在控制器中,而不是放在容器中一边看classHi code4jhon,非常感谢,这确实是第一个extjs mvc项目,谢谢你的回答