2013-12-23 41 views
2

当我们工作的一个ExtJS的MVC项目,我们可以处理视图事件或者视图或控制器内。我们如何确定在视图中处理了哪些事件以及控制器中处理了哪些事件。最佳做法是什么?处理在查看VS处理的控制器ExtJS的

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

+0

您检查了ExtJS的MVC例子吗?如果你还没有,我会建议通过它。它提供了一个简单但有用的示例http://docs.sencha.com/extjs/4.2.2/#!/guide/application_architecture。 –

+0

非常感谢您的评论。我确实,我的问题是,当我的视图中有很多类似的按钮处理程序驻留时,将它们全部移到控制器会更好吗?如果我没有错,通常我们会把这些处理程序放在视图中。 – cheftao

+0

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

回答

1

一两件事你可以做的就是利用你的控制器定义范围内的控制()方法。例如,拿这个代码,

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语言(http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.ComponentQuery)来选择一组Ext对象来分配render()事件。这就是说,对于视口中的所有面板,请拨打onPanelRendered()来获取render()事件。所以在你的情况下,你想选择一些按钮。因此,我添加了另一个示例,用于选择ID为editform的某个表单,然后选择包含属性action = save的按钮。您可以通过这些组件查询获得非常具体的信息我建议阅读API的ComponentQuery部分以查看更多示例。这取决于你如何试图选择按钮。

+0

非常感谢。这是非常有帮助的 – cheftao

+0

此外,所以你建议把所有的按钮处理到控制器,而不是把它们放在视图类 – cheftao

+0

这是控制器的整个重点。 –

0

如果你是MVC的新手,也许你应该只听控制器中的事件,一旦你开发了几个项目,并且你已经获得了纪律并享受了在控制器中监听事件的好处,那么你将能够混合使用(何时使用处理程序以及何时使用控制器会变得明显)。

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

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

最好的问候。

+0

您好code4jhon,非常感谢,这的确是第一个extjs mvc项目,谢谢你的回答 – cheftao