2011-12-12 22 views
1

我創建了一個帶有幾個選項卡的選項卡面板,當我嘗試實施甘特圖(需要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??"); 
    } 

我可以看到螢火蟲的面板,看起來它應該,但我沒有看到一個體場,如果是相關的「元素'面板的價值是「身體」。 我不明白爲什麼它是未定義的,請幫助。

回答

4

您需要等到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(); 
+0

感謝這解釋了爲什麼當它是活動選項卡時它工作正常。 – Crushing

0

如果沒有一個完整的運行示例(我知道可能很難產生),並且不知道哪個版本,我最好的猜測是,你正在試圖之前訪問身體面板實際上被渲染。在3.x版本中,我們使用的是ExtJS的源代碼中的以下行設置面板的身體:

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

而這種代碼來了的OnRender方法中。也許你試圖從構造函數或initComponent中訪問面板的主體,這太早了。請嘗試在afterRender內部進行(上述所有內容都假設您正在創建自定義小部件)