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

ExtJS Ext.panel.body is undefined.. Why?

本文关键字:未定义 为什么 body panel Ext ExtJS      更新时间:2023-09-26

我创建了一个有几个选项卡的选项卡面板,当我尝试实现甘特图(需要dom创建)时,我一直看到面板。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字段,如果这是相关的,面板的"元素"值是"body"。我不明白为什么没有定义,请帮助。

你需要等到面板渲染完成后。

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();

如果没有完整的运行示例(我知道可能很难生成),并且不知道是哪个版本,我的最佳猜测是您试图在面板实际呈现之前访问body 。在3。我们在ExtJS源代码中使用以下行设置面板的主体:

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

这段代码来自于onRender方法。也许你正试图从构造函数或initComponent中访问面板的主体,这还为时过早。尝试在afterRender中这样做(以上所有内容都基于您正在创建自定义小部件的假设)

相关文章: