Extjs 4.1 - 如何将侦听器从对象A复制到对象B.

时间:2017-06-20 13:29:52

标签: javascript extjs listeners event-listener

任何人都知道如何将侦听器从Object复制到另一个?

我试过

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

但是它没有起作用,因为我扩展了对象b 它没有在我听过扩展的函数中的断点处停止,是否有任何“好方法”这样做?

2 个答案:

答案 0 :(得分: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á,树节点现在拥有相同的监听器。

答案 1 :(得分:0)

在课堂上定义你的代码。 Ext.define(' appname.myapp.formname.form' { 的xtype:' anyname&#39 ;, 听众:{ 点击........ KEYUP ..... } }); 在你

的地方使用你的xtype