1

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

1 回答 1

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

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

于 2012-01-13T14:54:32.623 回答