Extjs 4 Designer 1.2选项卡面板

时间:2011-09-01 09:01:42

标签: extjs4 tabpanel

我正在使用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();
        }
    }   
});

1 个答案:

答案 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 
    }
  });
}

(此代码来自控制器,而不是专门的面板,所以虽然我希望它能立即使用,但请记住它可能需要一些修改。不要忘记你的逗号!)