dart SDK中是否有事件委托?

时间:2013-04-23 11:41:08

标签: dart

想象一下,您希望收听对页面上任何锚元素所做的所有点击。页面上的锚点可以在页面生命周期内动态添加/删除,并且您希望注册所有点击事件,即使是新添加的事件。

有没有办法如何使用标准库在Dart中附加委托事件(如jQuery)?

在jQuery中,您可以使用element.on('click', '.selector', handler);实现此目的。

2 个答案:

答案 0 :(得分:7)

您现在可以使用ElementStream.matches执行此操作:

document.body.onClick.matches('.selector').listen((Event event) {
  print('Super cool!');

  // The currently registered target for the event
  // document.body
  event.currentTarget;

  // The element whose CSS selector matched
  // .selector
  event.matchingTarget;

  // The target to which the event was originally dispatched
  // the real element clicked under .selector
  event.target;
});

答案 1 :(得分:2)

因为我找不到可行的解决方案,所以我创建了启用委派的包。

你可以找到它 http://pub.dartlang.org/packages/delegate

代码很简单:

delegate(parent, condition, handler) {
  return (event) {
    var element = event.target;
    while (element != parent && element != null) {
      if (condition(element)) {
        handler(event, element);
      }
      element = element.parent;
    }
  };
}

delegateOn(parent, String eventType, condition, handler) {
  parent.on[eventType].listen(delegate(parent, condition, handler));
}