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