想象一下,您想收听对页面上任何锚元素所做的所有点击。页面上的锚点可以在页面生命周期内动态添加/删除,您想要注册所有点击事件,即使是新添加的。
有什么方法可以使用标准库在 Dart 中附加委托事件(如在 jQuery 中)?
在 jQuery 中,您可以使用element.on('click', '.selector', handler);
.
想象一下,您想收听对页面上任何锚元素所做的所有点击。页面上的锚点可以在页面生命周期内动态添加/删除,您想要注册所有点击事件,即使是新添加的。
有什么方法可以使用标准库在 Dart 中附加委托事件(如在 jQuery 中)?
在 jQuery 中,您可以使用element.on('click', '.selector', handler);
.
您现在可以这样做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;
});
因为我没有找到可行的解决方案,所以我创建了启用委派的包。
您可以在 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));
}