根据ExtJS4中新的MVC模式,我正在创建一个动态控制器,并遇到了一个小问题。我已经使用this.control方法将控制器附加到我的视图中。当第二次创建控制器(在我的导航中来回)时,我已经连接了几次。我的问题是:什么是销毁控制器或删除我通过this.control命令设置的所有监听器的最佳方法。
提前致谢 克里斯
我的新控制器的代码如下所示:
我像这样创建新的控制器:
var step1Controller = Ext.create("MyApp.controller.Step1Controller", {
application : this.application
});
step1Controller.init();
在我的控制器的init函数中,我将控制器连接到这样的视图:
init : function() {
this.addEvents(['step1completed','basecontructionaborted']);
this.setupScreenLayout();
this.getTmpConfiguredControlModelsStore().removeAll();
this.application.fireEvent("addBreadCrumb", "Inbetriebnahme");
this.application.fireEvent("addBreadCrumb", "Schritt 1/3");
this.control({
'#addmodelbutton' : {
click : this.onAddBtnClick
},
'#modelviewer' : {
modelselected : this.onPanelSelect
},
'#navigationcontainer #movemodelleftbutton' : {
click : this.onMoveModelLeftClick
},
'#navigationcontainer #continuestep2' : {
click : this.onContinueStep2Click
},
'#navigationcontainer #abortbutton' : {
click : this.onAbortButtonClick
}
});
console.log('[BaseConstruction | init] completed');
}
答案 0 :(得分:1)
老问题,但我解决了半天的问题,所以我会发布我是如何绕过它的。这个问题似乎与我自己的问题非常相似。希望它对其他人有用。
我正在动态加载控制器/视图,并且所有侦听器都通过app.control连接到控制器的init()中。工作得很好,直到我开始反复破坏/初始化视图。监听器在view.destroy()之后保留在视图上,因此稍后在路上初始化它们会导致那些监听器(即渲染,点击等)触发两次。
这解决了我:
app.control({
'element': {
beforerender: {
fn: function(thing){
// beforerender stuff for thing
thing.on('select', function(this, record, item, index){
console.log('select fired');
});
},
single: true
},
}
});
请注意附加到'beforerender'的“single:true”。这是关键部分。所有其他以前写的像'beforerender'的听众都被.on()移到了它里面。
干杯!