想象一下,您希望收听对页面上任何锚元素所做的所有点击。页面上的锚点可以在页面生命周期内动态添加/删除,并且您希望注册所有点击事件,即使是新添加的事件。
有没有办法如何使用标准库在Dart中附加委托事件(如jQuery)?
在jQuery中,您可以使用element.on('click', '.selector', handler);
实现此目的。
答案 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));
}