ExtJS Ext.panel.body не определено .. Почему? - PullRequest
1 голос
/ 12 декабря 2011

Я создал панель вкладок с несколькими вкладками, и когда я пытаюсь реализовать диаграмму Ганта (требуется создание 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, если это уместно, значение 'elements' панели равно "body". Я не понимаю, почему он не определен, пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 12 декабря 2011

Вам нужно подождать, пока панель не будет обработана.

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 голосов
/ 12 декабря 2011

Без полного запущенного примера (который я знаю, может быть трудно сгенерировать) и без знания какой версии, я думаю, что вы пытаетесь получить доступ к телу до Панель фактически отображается. В версии 3.x мы используем следующую строку в исходном коде ExtJS для установки тела панели:

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

И этот код входит в метод onRender. Возможно, вы пытаетесь получить доступ к телу панели из конструктора или initComponent, что было бы слишком рано. Вместо этого попробуйте сделать это внутри afterRender (все вышеизложенное основано на предположении, что вы создаете собственный виджет)

...