Extjs 4.1 - 如何将侦听器从对象 A 复制到对象 B
Posted
技术标签:
【中文标题】Extjs 4.1 - 如何将侦听器从对象 A 复制到对象 B【英文标题】:Extjs 4.1 - How to copy Listeners from Object A to Object B 【发布时间】:2017-11-23 01:56:45 【问题描述】:有人知道如何将侦听器从 Object 复制到另一个吗?
我试过了
Object a,b (pre-created...)
b.events = a.events
b.hasListeners = a.hasListeners
但是当我扩展 Object b 时它没有工作,它没有在我监听扩展的函数中的断点处停止,有什么“好方法”吗?
【问题讨论】:
两个对象是否相似。例如,您有网格 obj 与 Panel 对象,如果您将网格的 itemclick 事件复制到面板,它将不起作用。那么您做得对吗? 对象 a,是一个树节点,b 也是一个树节点......所以是的,我想我这样做是对的:X TreeNode是什么意思,是什么类?实现 NodeInterface 的东西? @EvanTrimboli 是的对不起,相当于 NodeInterface docs.sencha.com/extjs/4.0.7/#!/api/Ext.data.NodeInterface 【参考方案1】:在课堂上定义你的代码。 Ext.define('appname.myapp.formname.form', xtype:'任何名称', 听众: 点击........ 键控…… ); 在哪里使用你的 xtype
【讨论】:
【参考方案2】:你不应该直接将 ExtJS 生成的对象层次子树链接到其他对象;这是一种糟糕的风格,可能会导致各种问题,例如内存泄漏或过早破坏。
例如如果一个对象被销毁,但另一个仍然存在,共享事件对象会发生什么?
它可能会或可能不会被析构函数销毁,然后另一个对象尝试访问它,这会导致未定义的行为。
如果您需要在多个对象上使用相同的侦听器,您应该创建一个从中派生这些对象的原型,或者创建一个将这些侦听器函数准确添加到您作为参数提供的任何对象的函数。
对于您的示例,因为节点可以由阅读器自动创建,所以我将使用第二种方法,在包含节点的商店中添加函数:
addListenersToTreeNode: function(node)
node.on('collapse', this.onCollapse);
node.on('expand', this.onExpand);
node.on('example', this.onExample);
然后在两个节点上调用函数:
nodeStore.addListenersToTreeNode(a);
nodeStore.addListenersToTreeNode(b);
瞧,树节点现在具有相同的侦听器。
【讨论】:
但是如果你将动态监听器添加到 A... 并且你不知道它有什么监听器呢?您如何将其动态地重新添加到 B ?以上是关于Extjs 4.1 - 如何将侦听器从对象 A 复制到对象 B的主要内容,如果未能解决你的问题,请参考以下文章
Extjs 4.1 - CellEditing 插件中的侦听第二次不起作用