2011-12-12 86 views
1

我创建了一个带有几个选项卡的选项卡面板,当我尝试实施甘特图(需要dom创建)时,我总是看到panel.body是未定义的,即使我向面板添加了一些东西...ExtJS Ext.panel.body未定义。为什么?

...},{ 
title: "Descriptions View", 
id: 'dviewTab', 
iconCls: 'icon-desc', 
autoWidth: true, 
forceLayout: true, 
header: false, 
xtype: 'panel', 
items: [ {xtype: 'textfield', value: 'testing'} ] // so we have something in the 'body' 
},{....} 

然后面板被创建后我做

var uiPanel = Ext.getCmp('dviewTab'); 
    if (uiPanel.body) 
    { 
     // never gets here :(
    } // if 
    else 
    { 
     this.logger("uiPanel.body is undefined.... WHY??"); 
    } 

我可以看到萤火虫的面板,看起来它应该,但我没有看到一个体场,如果是相关的“元素'面板的价值是“身体”。 我不明白为什么它是未定义的,请帮助。

回答

4

您需要等到Panel完成渲染后。

var myPanel = new Ext.Panel({}); 
console.log("`myPanel.body` is "+myPanel.body); // "`myPanel.body` is undefined" 

myPanel.on('render', function() { 
    console.log("`myPanel.body` is "+myPanel.body); // "`myPanel.body` is [object Object]" 
}); 

var container = Ext.getCmp("ext-comp-123"); 
container.add(myPanel); 
container.doLayout(); 
+0

感谢这解释了为什么当它是活动选项卡时它工作正常。 – Crushing

0

如果没有一个完整的运行示例(我知道可能很难产生),并且不知道哪个版本,我最好的猜测是,你正在试图之前访问身体面板实际上被渲染。在3.x版本中,我们使用的是ExtJS的源代码中的以下行设置面板的身体:

this.body = cp.down('.'+this.bodyCls); 

而这种代码来了的OnRender方法中。也许你试图从构造函数或initComponent中访问面板的主体,这太早了。请尝试在afterRender内部进行(上述所有内容都假设您正在创建自定义小部件)