2013-04-25 37 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

相关问题