2017-06-20 63 views
-1

任何人都知道如何將偵聽器從Object複製到另一個?Extjs 4.1 - 如何將對象A中的聽衆複製到對象B

我試圖

Object a,b (pre-created...) 
    b.events = a.events 
    b.hasListeners = a.hasListeners 

但正如我擴大對象B它並沒有停止在斷點我曾在我的擴大已經監聽的功能它沒有工作,有沒有這樣做的任何「好辦法」它?

+0

這兩個對象都是相似的。例如,您有網格對象與Panel對象,並且如果您將網格的itemclick事件複製到面板,它不會工作。所以您做對了嗎? – Tejas

+0

對象a,是treenode,b也是treenode ... Soo是的,我想我是這樣做的:X – ioliano

+0

你是什麼意思的TreeNode,它是什麼類?實現NodeInterface的東西? –

回答

2

你不應該直接將ExtJS生成的對象層次子樹連接到其他對象;這是不好的風格,可能會導致各種問題,如內存泄漏或過早的破壞。

E.g.如果一個對象被銷燬但另一個對象繼續存在,共享事件對象會發生什麼?

它可能會或可能不會被析構函數銷燬,然後另一個對象試圖訪問它,這會導致未定義的行爲。

如果您需要多個對象上的相同偵聽器,則應創建一個從中派生這些對象的原型,或者將這些偵聽器函數完全添加到您提供的任何對象作爲參數的函數中。

對於你的榜樣,因爲節點可以自動創建一個讀者,我會用第二種方法,增加了功能上包含節點商店:

addListenersToTreeNode: function(node) { 
    node.on('collapse', this.onCollapse); 
    node.on('expand', this.onExpand); 
    node.on('example', this.onExample); 
} 

然後調用這兩個函數節點:

nodeStore.addListenersToTreeNode(a); 
nodeStore.addListenersToTreeNode(b); 

和voilá,樹節點現在具有相同的偵聽器。

+0

優秀的答案!給你正確的答案,因爲...... – ioliano

+0

但是,如果你將聽衆添加到A ...並且你不知道聽衆是做什麼的?你怎麼能重新添加到B? – ioliano

0

在課堂上定義你的代碼。 Ext.define( 'appname.myapp.formname.form',{ 的xtype: 'anyname', 聽衆:{ 點擊........ KEYUP ..... } }); 使用你的xtype,你

相關問題