ExtJS Ext.panel.body未定义..为什么?

时间:2011-12-12 17:20:57

标签: javascript extjs panel undefined

我创建了一个带有几个标签的标签面板,当我尝试实现甘特图(需要创建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”。 我不明白为什么它没有定义,请帮助。

2 个答案:

答案 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中执行此操作(以上所有内容都基于您创建自定义窗口小部件的假设)