我有一個視圖,在ExtJs中有很多容器。考慮視圖的項目如下所示。EXTJS顯示/隱藏控制器中的許多容器
initComponent : function(){
this.items = [{
xtype : 'button',
text : 'menu1',
itemId : 'btnMenu1'
},{
xtype : 'button',
text : 'menu2',
itemId : 'btnMenu2'
},{
xtype : 'button',
text : 'menu3',
itemId : 'btnMenu3'
},{
xtype : 'container',
itemId : 'report1',
items : [{
xtype : 'button',
title : 'clickme 1'
}]
},{
xtype : 'container',
itemId : 'report2',
items : [{
xtype : 'button',
title : 'clickme 2'
}]
},{
xtype : 'container',
itemId : 'report3',
items : [{
xtype : 'button',
title : 'clickme 3'
}]
}]
this.callParent();
}
然後在我的控制器中,我想按照我點擊的按鈕來隱藏和顯示容器。 在控制器我對這些容器裁判和選擇,
refs : [{
/***all containers**/
ref : 'ref....',
selector : 'selector....'
}],
,然後當我點擊一個按鈕,我在每個函數執行功能
init: function() {
this.control({
'selector' : {
click : this.menu1
},
'selector' : {
click : this.menu2
},
'selector' : {
click : this.menu3
}
});
},
然後,我只是顯示/隱藏容器(所有相同的邏輯)
menu1 : function(){
this.getConatiner1().show();
this.getContainer2().hide();
this.getContainer3().hide();
},
一切工作正常,但問題是如何,如果我有100個conatiners(出於任何原因,無所謂)處理這種行爲。
如何動態顯示/隱藏容器,而不必重複太多手動隱藏/顯示容器的代碼行?
我已經嘗試了所有的選擇分配給數組類似
var selectors = ['getContainer1','getContainer2',...]
,然後只用一個for循環隱藏所有的,只是顯示正確的一個。
for(allselectors){
eval('selector.hide()');
}
selectedContainer.show();
類似這樣的東西似乎工作,但我更喜歡避免eval。對這種邏輯有什麼建議?
只是關於你創建項目的評論,你應該在構造函數中執行'this.items =',而不是initComponent。 – incutonez
我總是在'initComponent'中執行它。似乎有趣的研究爲什麼這應該在構造函數中完成。也許在另一篇文章中 – dev
你知道,我認爲這是整個Ext社區都在努力理解的東西,我可能完全錯了。然而,看着你的代碼,它肯定可以被配置驅動,並且你一定希望它在構造函數中。 – incutonez