Dar*_*Fan 2 javascript model-view-controller extjs extjs5
我正在尝试使用新的ExtJs 5.我根据ExtJs5定义的MVC模式创建了一个小应用程序.
我正在使用ViewControllers每一个View.
问题陈述:现在假设我有两个VC(Controller1和Controller2).每个人都有自己的方法.我希望从Controller1调用Controller2的方法.我想从Controller1更新与Controller2关联的视图.
E.g. Suppose there is a separate view for Status Bar and a ViewController(StatusBarController).
This VC has a method to update the view based on whatever message it receives as input parameter.
All the other controllers in the application will call this VCs method to update the status of the application on the status bar.
Run Code Online (Sandbox Code Playgroud)
在以前的版本中,this.getController('StatusBarController')用于获取任何控制器的句柄,然后调用其方法.
但是当我使用ViewController时,这在我的情况下不起作用.
任何人都可以指导我如何实现这个目标吗?而且这是否是正确/理想的方式来做这样的事情还是有更好的选择?
这是我的代码:
StatusBarView:
Ext.define('MyApp.view.statusbar.StatusBarView', {
extend : 'Ext.panel.Panel',
controller: 'StatusBarController',
region : 'south',
xtype : 'status-bar-panel',
html : 'This is a status bar'
});
Run Code Online (Sandbox Code Playgroud)
StatusBarController:
Ext.define('MyApp.controller.StatusBarController', {
extend : 'Ext.app.ViewController',
alias: 'controller.StatusBarController',
updateStatusBar : function(message) {
this.getStatusBarView().update(message);
}
});
Run Code Online (Sandbox Code Playgroud)
应用程序中的其他控制器:
Ext.define('MyApp.controller.ResourcesPanelController', {
extend : 'Ext.app.ViewController',
alias : 'controller.ResourcesController',
onItemClick : function(tree, record, item, index, e, eOpts) {
// here I am calling the other controller's method.
this.getController('StatusBarController').updateStatusBar(
record.data.text + ' has been clicked');
}
});
Run Code Online (Sandbox Code Playgroud)
ViewControllers与它们的视图紧密相关,它们甚至与视图一起创建和销毁,它们应该只控制自己的视图.我们的想法是在视图级别将逻辑与UI分开.
从另一个调用一个ViewController的方法不是一个好习惯,对于大型应用程序来说,它是通往地狱的途径,因为它不可避免地导致不可维护的意大利面条代码.
正确的方法是最小化ViewModel,ViewControllers和Controllers的数量,让它们在自己的职责范围内工作.
例如:假设您想要一个容器中的网格和表单.表格将允许编辑在网格中选择的记录.再加上一些按钮.这三个视图(容器,网格和表单)一起构成一个单元.从而:
因此,如果需要,您可以拥有一个MVC(全局)控制器来协调单元的功能,比如我们的三重奏.
此外,数据绑定在很大程度上简化了逻辑,因此控制器和监听器不需要那么多.
| 归档时间: |
|
| 查看次数: |
7276 次 |
| 最近记录: |