在我的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
答案 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
错误消息的原因。