extjs动态地向选项卡添加网格?

时间:2011-04-15 22:50:22

标签: extjs

在我的extjs tabpanel中,我有一个标签。在标签中我做了一个:

this.tab.add(this.someGrid1);

现在基于某种条件,我想做:

if (cond ==true)
this.tab.remove(this.someGrid1);
this.tab.add(this.someGrid2);

这可能吗? 我尝试没有删除它不起作用。没有任何事情发生,旧的someGrid1仍然存在。

编辑:通过提出建议,我将代码更改为:

if (cond ==true)
this.tab.remove(this.someGrid1);
this.tab.add(this.someGrid2);
this.tab.doLayout();

else if (cond ==false)
this.tab.remove(this.someGrid2);
this.tab.add(this.someGrid1);
this.tab.doLayout();

页面加载时,cond == true并且工作正常。当我通过组合将cond更改为false时,someGrid1加载正常。 当我改回cond ==true时,代码不会超出

this.tab.add(this.someGrid2);
this.tab.doLayout();

和someGrid2未呈现。错误是这样的:

Error: b.getPositionEl().dom is undefined

3 个答案:

答案 0 :(得分:1)

那段代码看起来对我来说。您是否尝试调试并验证在调用this.someGrid1方法时是否正确设置了remove?很容易让你的this范围在Ext。

中搞砸了

没关系,但您也可以尝试将true作为第二个参数添加到remove。这将强制Ext破坏组件,任何与之相关的dom都将消失。

如果您仍然无法使用此功能,可能会发布一些额外的代码,但我敢打赌,如果您使用Firebug并调试此功能,解决方案将是显而易见的。

答案 1 :(得分:1)

在运行时动态添加和删除组件时,您必须确保Ext触发组件的重新呈现,以确保反映更改后的状态。我实际上不知道您的面板的确切结构,但假设this.tab是您必须做的Ext.TabPanel

this.tab.doLayout();

重新渲染组件。

答案 2 :(得分:0)

dom在remove被销毁,所以你必须重新创建div。这就是您收到dom is undefined错误消息的原因。