2012-05-09 16 views
0

有沒有辦法查詢「up」?我在一個組件中,並想用control()註冊監聽器的父母事件。這需要一個查詢,讓我成爲我的主視圖的父母。具有ExtJS4的父級的ComponentQuery?

+1

每個問題包含80%的答案:) ...() – dbrin

回答

4

在ExtJS4中,您可以使用Ext元素中的'up()'。

】這個params是要找到e.g父元素的字符串:

var parentEl = Ext.get('childID').up('div.parentClass'); 

如果你提供有關部件的結構的一些細節/元素,我可以給它應該適應一個具體的例子。

編輯:要顯示來自一個組件

var myComponent = // however you've got it 

var theParentEl = myComponent.getEl().up('div.parentClass'); 
+0

謝謝。我知道'up()'方法,但是我需要這個功能作爲組件查詢選擇器。 –

+0

從組件中,您可以使用getEl()來獲取包含的元素(然後使用所描述的up方法),也可以沿着使用Component.findParentByType(xtype)的路線返回Ext容器。 – dougajmcdonald

+0

所以,上升只是可能的方法?像「a

2

通常up('PARENTCLASS')去「了」足夠你正在試圖做什麼。這是我做了代碼,以便元素生成它們在表單事件:

items: [ 
... 
    { xtype: 'checkbox', listeners: { 
     change: function() { this.up('window').fireEvent('checkboxchanged'); } 
    }} 
... 
] 
2

據我瞭解,你要聽從子組件的控制器控制功能具體由某個組件的父調度的事件。

沒有像'parent < component'這樣的查詢選擇器,您可以將它放在子控制器的控制函數中來監聽父事件。

通常我只是將父視圖添加到孩子的控制器,然後你可以聽它的事件。但我認爲你沒有這樣做,因爲你正試圖委託給不同的控制器或其他東西。

無論何時發生父事件,您都可以觸發子組件中的事件。父控制器裏面,你可以做這樣的:

var child = parent.down('child'); 
child.fireEvent('myOwnEventName', arg1, arg2, arg3, etc); 

然後你會添加一個處理的子控制器的控制功能來運行你想爲它的邏輯「myOwnEventName」。

如果家長沒有控制器,那麼您應該在父控制器中添加父組件作爲視圖。

1

Sencha幫助說:「候選組件的成員表達式可以被測試,如果表達式返回一個真值,候選組件將被包含在查詢中:」在http://docs.sencha.com/ext-js/4-0/#!/api/Ext.ComponentQuery幫助中。

我花了一段時間來實現我可以做我的控制器中的以下內容:

this.control({ 
    'window{down("testcomp")}[down]': { beforedestroy: this.doNotCloseIfUnsaved } 
}); 

使用{}操作,我們可以調用的任意代碼。 效率觀點真的不好,但它完成了工作。我不得不添加[down],因爲它從右向左運行組件查詢,所以我們必須確保down()存在,然後再嘗試運行它(在每個組件上)。因此,我能夠將一個事件附加到我的組件的任何窗口。

當然,如果你想確保它是直接的孩子而不是下面的任何地方,也可以使用其他函數,比如child()而不是down()。

+0

霍利莫莉 - 我不知道你可以做到這一點。如果你問我,它有點難以理解。 – dbrin

相關問題