使用 Polymer.Dart 构建单页应用程序,我在想实现双向 EventBus 的最佳方式
从孩子<polymer-element>我将使用fireand 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);
}
}
例如,为了捕获所有点击事件,并传递给fireand asyncFire,是捕获所有点击事件的最有效方法,使用this.shadowRoot.addEventListenerand 传递给fireor asyncFire,或者是否有更好、更有效的方法来监听<polymer-element>自身.