我创建了一个带有几个标签的标签面板,当我尝试实现甘特图(需要创建dom)时,我一直看到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??");
}
我可以在firebug中看到面板并且看起来应该如此,但是我看不到身体字段,如果这是相关的,则面板的“元素”值是“body”。 我不明白为什么它没有定义,请帮助。
答案 0 :(得分:4)
您需要等到面板渲染完毕后才能使用。
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();
答案 1 :(得分:0)
如果没有一个完整的运行示例(我知道可能很难生成),并且不知道哪个版本,我最好的猜测是你试图在 >面板实际上被渲染。在3.x版本中,我们使用ExtJS源代码中的以下行设置面板的正文:
this.body = cp.down('.'+this.bodyCls);
此代码属于onRender方法。也许你试图从构造函数或initComponent中访问面板的主体,这太早了。尝试在afterRender中执行此操作(以上所有内容都基于您创建自定义窗口小部件的假设)