【问题标题】:Javascript - Dispatch event to all objects in a setJavascript - 向集合中的所有对象发送事件
【发布时间】:2021-02-16 01:26:38
【问题描述】:

如何将自定义事件分派给我的集合中的所有自定义对象?

class Node{...}

a = new Node(...);
b = new Node(...);

var nodeSet = new Set(...);
let myEvent = new CustomEvent(...);

for (var node of nodeSet){
     node.shape.dispatchEvent(myEvent); 
}

Node.shape 是一个Konva 形状

由于我是 Javascript 初学者,请保持回复易于理解,谢谢。

【问题讨论】:

  • @RandyCasburn 我给了“事件接收者对象 javscript”一个快速的谷歌搜索,但我找不到任何我理解的东西。你愿意扩展吗?
  • 我不清楚 - 我已经回答了以下解决方案之一。
  • 啊,我明白了,我会试一试,让你知道。我早些时候考虑过这一点,但认为它有点笨拙,但解决方案仍然是解决方案。非常感谢。
  • 我进行了编辑以确保每个 node 对象都被识别。我将事件处理程序绑定到实例。
  • 如果你不喜欢分派给元素,你总是可以分派给document,但是它会在整个事件阶段被分派。

标签: javascript set konvajs event-dispatching for-of-loop


【解决方案1】:

为了使您的自定义事件与 Konva Node 对象一起使用,Shape 子类有一个 on 方法,允许您直接在形状上注册您的侦听器。

这样做:

class Node{...}

a = new Node(...);
b = new Node(...);
a.shape.on('Yo!', handler);
b.share.on('Yo!', handler);
  // all 4000 shapes

var nodeSet = new Set(...);
let myEvent = new CustomEvent('Yo!');

// If you only have one handler for every shape's treatment of CustomEvent
for (var node of nodeSet){
     node.shape.on('Yo!', handler);
}

for (var node of nodeSet){
     node.shape.dispatchEvent(myEvent); 
}

【讨论】:

  • 非常感谢,这个问题我还是暂时搁置一会,让其他建议进来。
  • 这很酷。乐意效劳。您会寻求哪些变化?
  • 我刚刚为你将它从 div 更改为 EventTarget - 有效。同样的方式。
  • 我想您会发现任何其他解决方案都需要将事件分派到文档或每个单独的节点。
  • 好吧,我屈服了——我去看了文档。这是您的解决方案(尽管很糟糕)。除非这些类是可扩展的,否则您将绑定到 API。然后你可以用另一种方式来做。
猜你喜欢
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多