2016-08-22 52 views
0

我有一个tabpanel并有很多孩子。每个都是可关闭的。我想在没有孩子的情况下移除tabpanel本身。当没有子面板时关闭整个tabpanel

listeners: { 
    close: function(element) { 
     var detailTabPanel = element.up('DetailTabPanel'); 
     if(detailTabPanel.items.length <= 1) 
     { 
      detailTabPanel.destroy(); 
     } 
    } 
} 

我已经编写了类似上面的代码来进行关闭操作。但我得到错误,如

Uncaught TypeError: Cannot read property 'get' of null DetailTabPanel is the tabpanel. 

回答

1

几乎在那里!试着这样说:

listeners: { 
    remove: function(tabpanel, child, eOpts) { 
     if (tabpanel.items.length === 0) { 
      tabpanel.destroy(); 
     } 
    } 
} 

见小提琴这里:https://fiddle.sencha.com/#fiddle/1fo2

你不必做callParent一个监听器里。

+0

如果看到控制台它的投掷错误。 – Hacker

+0

Tabpanel仍在删除选项卡并更新其布局。推迟删除tabpanel似乎解决了这一点。 两个变化:1)我已经把'destroy'改为'close'。摧毁往往有点强大,关闭允许更清洁的移除,解雇'close'事件。 2)我将tabpanel放置在容器面板中,以防止整个视口被移除。 –

+0

我已经将我上面提到的更改加入了小提琴示例 –

0

您正在使用错误的事件。而不是倾听儿童的close事件(在从面板中删除标签后调用该事件),您希望在标签面板本身上监听remove事件。

+0

听众:{ 删除:功能(部件,组件,eOpts){ 如果(element.items.length === 0) { element.destroy(); element.callParent(); } } }我试过上面的代码,但仍然收到像Uncaught Error这样的错误:调用了this.callParent(),但在父类(Ext.Base)中找不到这样的方法(fire) – Hacker