javascript - ExtJS 4 获取可观察对象的每个监听器

标签 javascript extjs observer-pattern listeners observable

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

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”的相同配置,包括监听器。

因此,问题是:如何保存可观察对象的每个监听器?

非常感谢!

最佳答案

您可以尝试为您的对象创建一个 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/

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

关于javascript - ExtJS 4 获取可观察对象的每个监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16225268/

相关文章:

javascript - 当我将一个 JS 文件导入另一个 JS 文件时会发生什么?

javascript - 我应该如何组织我的jquery代码使其变得干燥?

javascript - 为什么我的 ExtJS 表单没有提交?

iphone - 我如何为其他类的 TableView 和 UIView 设置背景图片

java - 一个类可以观察多个可观察对象吗?

ios - 转换为 ARC 后出现 "deallocated while key value observers were still registered with it."错误

javascript - 发送将 token 重置为之前状态的请求是否不安全?

Javascript 正在重新加载时执行

json - 如何配置extjs阅读器来读取这个json?

javascript - 关于ExtJs4 MVC架构