Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Extjs 4.1-如何将侦听器从对象A复制到对象B_Javascript_Extjs_Listeners_Event Listener - Fatal编程技术网

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

Javascript Extjs 4.1-如何将侦听器从对象A复制到对象B,javascript,extjs,listeners,event-listener,Javascript,Extjs,Listeners,Event Listener,有人知道如何将侦听器从一个对象复制到另一个对象吗 我试过了 Object a,b (pre-created...) b.events = a.events b.hasListeners = a.hasListeners 但是当我扩展对象b时,它不起作用。它没有在我监听扩展的函数中的断点处停止,有什么“好方法”吗?在类中定义代码。 Ext.define('appname.myapp.formname.form'{ xtype:'anyname', 听众:{ 点击 钥匙。

有人知道如何将侦听器从一个对象复制到另一个对象吗

我试过了

    Object a,b (pre-created...) 
    b.events = a.events
    b.hasListeners = a.hasListeners
但是当我扩展对象b时,它不起作用。它没有在我监听扩展的函数中的断点处停止,有什么“好方法”吗?

在类中定义代码。 Ext.define('appname.myapp.formname.form'{ xtype:'anyname', 听众:{ 点击 钥匙。。。。。 } });
在不应直接将ExtJS生成的对象层次子树链接到其他对象的地方使用xtype;这是一种糟糕的风格,可能会导致各种问题,比如内存泄漏或过早破坏

例如,如果一个对象被销毁,而另一个对象继续存在,共享事件对象会发生什么情况

它可能被析构函数破坏,也可能不被析构函数破坏,然后另一个对象试图访问它,这会导致未定义的行为

如果在多个对象上需要相同的侦听器,则应该创建一个从中派生这些对象的原型,或者创建一个将这些侦听器函数添加到作为参数提供的任何对象的函数

对于您的示例,由于节点可以由读取器自动创建,因此我将使用第二种方法,在包含节点的存储上添加函数:

addListenersToTreeNode: function(node) {
    node.on('collapse', this.onCollapse);
    node.on('expand', this.onExpand);
    node.on('example', this.onExample);
}
然后在两个节点上调用该函数:

nodeStore.addListenersToTreeNode(a);
nodeStore.addListenersToTreeNode(b);

瞧,树节点现在有了相同的侦听器。

这两个对象是相似的。例如,你有网格对象和面板对象,如果你将网格的itemclick事件复制到面板,它将不起作用。那么你做对了吗?对象a是树节点,b也是树节点。。。苏:是的,我想我做得对:X你说的TreeNode是什么意思,它是什么类的?实现NodeInterface的东西?@Evantimboli是的,对不起,相当于NodeInterface,但是如果你在一个。。。你不知道它有什么听众?你怎么能把它直接加到B上呢?