【发布时间】:2013-10-31 09:10:27
【问题描述】:
使用 Polymer.Dart 构建单页应用程序,我在想实现双向 EventBus 的最佳方式
从孩子<polymer-element> 我将使用fire 和asyncFire。
从父 <polymer-element> 我将使用 window.on['*'].listen 捕获所有事件。
由于 <polymer-element> 被封装,因此不会在元素本身之外冒出任何事件。
import 'package:polymer/polymer.dart';
import 'dart:html';
@CustomTag('click-counter')
class ClickCounter extends PolymerElement {
@published int count = 0;
ClickCounter.created() : super.created() {
this.shadowRoot.addEventListener('click', (e) {
if(e.target is AnchorElement) {
AnchorElement anchor = e.target;
this.asyncFire('ce', detail: "Anchor ${anchor.pathname}", canBubble: true);
e.preventDefault();
}
}, true);
}
void increment(Event event, var detail, Node target) {
count++;
this.asyncFire('ce', detail: "Click...$count..", canBubble: true);
}
}
例如,为了捕获所有点击事件,并传递给fire 和asyncFire,是使用this.shadowRoot.addEventListener 捕获所有点击事件并传递给fire 或asyncFire,或者有更好、更有效的方法来收听<polymer-element> 本身。
【问题讨论】:
标签: dart dart-polymer