2012-09-22 62 views
3

的不同區域在煎茶的API爲邊界佈局,它說:訪問一個邊界佈局

有一個在ExtJS的4.0+

沒有BorderLayout.Region類我在各種博客發現了什麼,訪問中心面板是這樣的:

var viewPort = Ext.ComponentQuery.query('viewport')[0]; 
var centerR = viewPort.layout.centerRegion; 

再次向文檔,我看到centerRegion是一個私有函數(爲什麼?),我不在乎依靠這些,F或未來打樣。此外,沒有westRegion,northRegion等...

如何獲得這些項目?
我當然可以得到區域內的項目:各種面板,等等,但我想完整控制視口,保存我的邊界佈局。 這是我現在在做什麼:

var viewPort = Ext.ComponentQuery.query('viewport')[0]; 
    var view = Ext.widget('my-new-tab-panel'); 

    viewPort.layout.centerRegion.removeAll(); 
    viewPort.layout.centerRegion.add(view); 

有沒有更好的辦法?

回答

2

通常,我爲每個必須使用的容器設置一個id。所以,我的中心區域將有一個ID,我會用Ext.getCmp()函數得到它。

否則,訪問到你可以做視項目如下:如果您已經定義中心區域爲視口的第一個項目

var viewPort = Ext.ComponentQuery.query('viewport')[0]; 
var view = Ext.widget('my-new-tab-panel'); 

viewPort.items.items[0].removeAll(); 
viewPort.items.items[0].add(view); 

,那麼上面的代碼是好的,但如果你已經將其定義爲第三或第四個,則必須根據您所在區域的位置(viewPort.items [3]或viewPort.items [4]等)更改索引。

另一種方法是使用查詢選擇:

var cr = viewPort.down('panel[region=center]'); 
cr.removeAll(); 
cr.add(view); 

然而,這種方式下,你必須在精確的xtype(如面板在這種情況下)查詢。

無論如何,我認爲最好的方法是爲每個地區使用一個ID。

+0

10x爲您的答案。一些評論: 1.這是Extjs4.1,我想盡可能避免使用'Ext.getCmp()'。我使用查詢來代替。 2.使用物品[i]聽起來很危險。因爲你依賴於物品訂單。從來不是一件好事。 3.剛試過。 '項目'不起作用。你需要使用'viewPort.items.items [0]',如果你的西部區域是秒,它將顯示在'items [2]'而不是'items [1]'上,因爲邊界佈局會自動添加分隔符。 – bldoron

+0

是的,你說得對。我添加了另一個例子;) – Wilk

+0

我會接受你的答案,主要是因爲你使用了'[region = center]',但是這對我來說仍然不是正確的答案。無論如何,10倍。 – bldoron