2013-04-25 38 views
2

我定義爲一個可觀察對象如下:ExtJS的4獲得可觀察到的對象的每個聽衆

Ext.define ('MyObject', { 
    mixins: { 
    observable: 'Ext.util.Observable' 
    } , 
    constructor: function (cfg) { 
    this.initConfig (cfg); 
    this.mixins.observable.constructor.call (this, cfg); 
    ... 
    } 
}); 

然後,我創建這個對象的實例,並附加一些聽衆:

var obj = Ext.create ('MyObject', {...}); 
obj.on ({ 
    first: function() {...} , 
    second: function() {...} , 
    third: function() {...} , 
    fourth: function() {...} 
}); 

最後,我要銷燬'obj'實例,但此時我必須保存以前連接的每個偵聽器,因爲我很瘋狂,而且需要創建另一個'MyObject'實例,具有相同的配置'obj',包括聽衆。

所以,問題是:如何保存可觀察對象的每個偵聽器?

非常感謝!

+0

爲什麼不在構造函數中描述監聽器?一個對象的initComponent?或者我不明白這個問題? – Vlad 2013-04-25 22:27:39

+0

因爲我不知道哪個偵聽器會附着在該對象上。 – Wilk 2013-04-25 22:34:06

回答

5

您可以嘗試創建一個getListeners()方法爲對象:

Ext.define ('MyObject', { 

    ... 

    getListeners: function() { 
     var me = this, 
      l = {}; 
     for(var event in me.hasListeners) { 
      Ext.each(me.events[event].listeners, function(listener) { 
       l[event] = listener.o[event]; 
      }); 
     } 
     return l; 
    } 
}); 

... 

var listeners = obj.getListeners(); 
obj.destroy(); 

obj2.on(listeners); 

查看的jsfiddle:http://jsfiddle.net/8GMsp/

注意:我還沒有嘗試在實際應用中使用它。可能需要修改。

+1

感謝您的提示!我改進了您的解決方案:現在,它可以保存單個事件的多個偵聽器。 – Wilk 2013-04-26 10:55:19

+1

實際例子:https://gist.github.com/wilk/5472503 – Wilk 2013-04-27 09:44:43

+1

@Wilk好。我認爲如果添加監聽器作爲一個單獨的方法會更容易 - setListeners():https://gist.github.com/werdender/5472782 – Vlad 2013-04-27 11:38:46

相關問題