我正在使用ExtJs 4.0(Ext Designer 1.2.0)。 我有一个卡片布局的面板,其中包含一个按钮(添加标签btn)和一个标签面板。每个选项卡包含一个带按钮的单独工具栏如果关闭,添加选项卡btn将添加Tab2。
我观察到当我运行应用程序时,可以执行第二个选项卡按钮上的事件,但如果我关闭第二个选项卡并从添加选项卡btn动态添加它,则不会执行事件。
有什么建议吗?
以下是我的代码:(MyPanel.js)
Ext.define('MyApp.view.MyPanel', {
extend: 'MyApp.view.ui.MyPanel',
initComponent: function() {
var me = this;
me.callParent(arguments);
me.down('button[id=addTab]').on('click',me.onAddTabClick,me);
me.down('button[text=Second Button]').on('click',me.onSecondBtnClick,me);
},
onSecondBtnClick: function(){
alert("Second Btn");
},
onAddTabClick: function(){
var myTab = this.down('#myTabPanel').child('#tab2');
if (myTab) {
myTab.show();
} else {
this.down('#myTabPanel').add({
title : 'Tab2',
activeTab: 0,
closable : true ,
id: 'tab2',
items: [{
xtype: 'panel',
id: 'tab2',
closable: true,
title: 'Tab 2',
dockedItems: [
{
xtype: 'toolbar',
height: 29,
id: 'Tab2Toolbar',
dock: 'top',
items: [
{
xtype: 'button',
text: 'Second Button'
}
]
}
]
}]
}).show();
}
}
});
答案 0 :(得分:0)
我猜是因为您使用的是initComponent
而不是init
,因此只有在首次加载MyPanel
时才会应用一次事件。如果您使用init配置,我相信无论按钮是否已被销毁,它都会正确应用您的事件。
简而言之,尝试删除initComponent
块并替换它,因为init是用于设置事件的“正确”ExtJS 4方式:
init: function (){
this.control({
'button[id=addTab]': {
click: this.onAddTabClick
},
'button[text=Second Button]':{
click : this.onSecondBtnClick
}
});
}
(此代码来自控制器,而不是专门的面板,所以虽然我希望它能立即使用,但请记住它可能需要一些修改。不要忘记你的逗号!)