yayg2008
2010-06-23 12:48
浏览 252

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]
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • upup1000 2010-06-23 20:46
    已采纳

    更好的办法就是把这个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

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

    点赞 打赏 评论
  • upup1000 2010-06-23 15:07

    tab.add(node.id);

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

    点赞 打赏 评论
  • upup1000 2010-06-23 15:55

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

    点赞 打赏 评论
  • upup1000 2010-06-23 16:02

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

    点赞 打赏 评论
  • upup1000 2010-06-23 16:52

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

    点赞 打赏 评论
  • upup1000 2010-06-23 16:53

    已经不存在了

    点赞 打赏 评论

相关推荐 更多相似问题