我已经组装了一个适度大小的应用程序,我正在分解代码以减少维护行的总数以及性能调整.我发布此问题的用例是我在菜单中嵌入了一个按钮,该按钮调用(或需要调用)显示表单的控制器上的方法.目前,这是通过直接引用特定按钮控件,创建面板以及将该面板放在视口内来实现的.
问题出现在:ExtJS 4.1 Call One Controller From Another开始解决响应结束时的最佳实践问题,但并未真正解决可以复制或扩展以覆盖更复杂实现的基础案例(是我的问题的目的.)
鉴于两个控制器:
// controller/Menu.js
Ext.define("App.controller.Menu", {
extend: "Ext.app.Controller",
init: function () {
this.control({
"viewport > mainmenu > button": function (ctl, evt) {
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
// controller/User.js
Ext.define("App.controller.User", {
extend: "Ext.app.Controller",
stores: ["User"],
views: ["user.Edit", "user.List"],
init: function () {
}
});
Run Code Online (Sandbox Code Playgroud)
在两个控制器之间实现横向连接以在"创建新帐户"的菜单按钮上正确委派响应点击事件的责任的最佳方法是什么?
使用componentquery我可以使用tag属性轻松缩小主菜单视图中按钮的焦点,以便User控制器直接响应事件:
// controller/User.js
"viewport > mainmenu > button [tag=user.create]": function () {}
Run Code Online (Sandbox Code Playgroud)
或者我可以通过对象图形来查找菜单控制器中对用户控制器的引用并以这种方式调用它.
// controller/Menu.js
// switch on tag case …Run Code Online (Sandbox Code Playgroud)