Extjs 4 Designer 1.2 选项卡面板

发布于 2024-12-02 05:11:02 字数 1869 浏览 1 评论 0原文

我正在使用 ExtJs 4.0(Ext Designer 1.2.0)。 我有一个带有卡片布局的面板,其中包含一个按钮(添加选项卡 btn)和一个选项卡面板。每个选项卡都包含一个带有按钮的单独工具栏。如果 Tab2 关闭,添加选项卡 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();
        }
    }   
});

I am working with ExtJs 4.0 ( Ext Designer 1.2.0).
I have a panel with card layout which contains a button(add tab btn) and a tab panel. Each tab contains a separate toolbar with button. Add tab btn would add Tab2 if it is closed.

I observed that when I run the application, event on 2nd tab's button can be executed but if I close the second tab and add it dynamically from add tab btn, event won't be executed.

Any suggestions??

Following is my code : (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();
        }
    }   
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我恋#小黄人 2024-12-09 05:11:02

我猜测,因为您使用的是 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 
    }
  });
}

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

I'm guessing that because you're using initComponent instead of init, the event is only getting applied once, when MyPanel is first loaded. If you use the init config instead, I believe it properly applies your events whether the button has been destroyed already or not.

In short, try removing your initComponent block and replacing it with this, as init is the "proper" ExtJS 4 way for setting up events:

init: function (){
  this.control({
    'button[id=addTab]': {
      click: this.onAddTabClick
    },
    'button[text=Second Button]':{
      click : this.onSecondBtnClick 
    }
  });
}

(This code is from a controller, not specifically a panel, so while I hope it works right away, keep in mind that it may require some modification. Don't forget your comma!)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文