我一直在使用ExtJS,但现在我正在尝试将我的项目转换为正确使用他们推荐的MVC风格。
我有一个视图和一个控制器。我正在尝试为boxready声明一个事件监听器来调用控制器方法。当我在initComponent
内声明监听器时,这不起作用 - 它说当我希望它在我的控制器中查找方法时,它无法在我的视图中找到该方法。
请参阅此处的jsFiddle(相关代码位于MyPanel.js中):senchafiddle
答案 0 :(得分:1)
无需在initComponent中附加侦听器,以声明方式执行:
listeners: {
boxready: 'controllerMethodName'
}
直接在您的视图中声明此内容。
答案 1 :(得分:1)
你可以像布兰登提出的那样做。我认为这也是Sencha在其中的文档。
我做的有点不同,因为我不了解控制器的观点。关于你的例子,意思是:视图不应该知道控制器内部或者应该有一个test()函数。看一下控制器内的init():
Ext.define('MyApp.view.MyPanelController', {
extend: 'Ext.app.ViewController',
alias: 'controller.mypanel',
init: function () {
this.getView().on("boxready",this.test, this);
},
test: function () {
Ext.Msg.alert('hi');
}
});
在视图中很少见:
Ext.define('MyApp.view.MyPanel', {
extend: 'Ext.form.Panel',
xtype: 'mypanel',
controller: 'mypanel',
html: 'sometext',
title: 'sometitle'
});
这可能有一些我不知道的缺点。
查看相应的sfiddle: https://fiddle.sencha.com/#fiddle/tpm