Extjs Tabpanel加载问题

我的一个页面,左边是个树形菜单,中间是Tabpanel,当点击左边某个叶子结点时,就在右边打开一个tab,
我是根据id来查找的,目前的情况是第一次打开没问题,但当我关掉某个再打开时,就会提示comp is undefinded,
请高手支招,[code="js"]var tree = new Ext.tree.TreePanel({
loader : treeLoader,
enableDD : true,
rootVisible : false,
border : false,
root : rootNode,//采用AsycTreeNode
listeners : {
click : function(node, event) {
if (node && node.id == 'logout') {
Ext.Msg.alert("安全退出", 'Logout!');
} else if (node && node.isLeaf()) {

                        addTab(node);
                    }
                }
            }
        });
function addTab(node) {
    var tab = Ext.getCmp('view').findById('mainTab');
    alert(tab.findById(node.id));
    if (!tab.getComponent(node.id)) {
        tab.add(node.id);
        tab.setActiveTab(node.id);
    } else {
        tab.setActiveTab(node.id);
    }
}[/code]

更好的办法就是把这个node.id不定义成一个panel而是定一成一个panel的config

这其实是Ext的延时渲染
把类似这样的内容
node.id = [b]new Ext.Panel([/b]{
title : "abc",
...
}[b])[/b]

改成类似这样

node.id = {
[u]xtype : "panel",[/u]
title : "abc",
...
}

如果只想加个panel或container,这里的xtype可以省略,如果加别的组件,也可以使用相应的xtype

主要看粗体和下划线标注的地方 看他们的区别

tab.add(node.id);

node.id是什么东东,
tab的add方法里的参数又是什么东东

难道你重写了Ext.TabPanel的add方法?

我问了你两个问题你只回答了第一个

你的意思是node.id是一个panel?而不是一个字符串?这种处理够特别的,哈哈。只是你这个panel实际上不是在一个function中定义并反回的,它只定义了一次,当你关闭tab选项后,这个panel就会被消毁,你再次加,当然错误了,因为这个对象此时已经东存在了

已经不存在了