ExtJS 4获取可观察对象的每个侦听器

Wil*_*ilk 2 javascript listeners extjs observable observer-pattern

我有一个可观察对象,定义如下:

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

然后,我创建了这个对象的实例并附加了一些监听器:

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

最后,我要破坏'obj'实例,但此时我要保存以前附加的每个听众,因为我很生气,我需要创建另一个'MyObject'实例,具有相同的配置'obj',听众包括在内.

所以,问题是:如何保存可观察对象的每个侦听器?

非常感谢!

Vla*_*lad 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);
Run Code Online (Sandbox Code Playgroud)

请参阅jsfiddle:http://jsfiddle.net/8GMsp/

注意:我没有尝试在实际应用程序中使用它.可能需要修改.