ExtJS Ext.panel.body未定义。为什么?
问题描述:
我创建了一个带有几个选项卡的选项卡面板,当我尝试实施甘特图(需要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??");
}
我可以看到萤火虫的面板,看起来它应该,但我没有看到一个体场,如果是相关的“元素'面板的价值是“身体”。 我不明白为什么它是未定义的,请帮助。
答
您需要等到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();
答
如果没有一个完整的运行示例(我知道可能很难产生),并且不知道哪个版本,我最好的猜测是,你正在试图之前访问身体面板实际上被渲染。在3.x版本中,我们使用的是ExtJS的源代码中的以下行设置面板的身体:
this.body = cp.down('.'+this.bodyCls);
而这种代码来了的OnRender方法中。也许你试图从构造函数或initComponent中访问面板的主体,这太早了。请尝试在afterRender内部进行(上述所有内容都假设您正在创建自定义小部件)
感谢这解释了为什么当它是活动选项卡时它工作正常。 – Crushing