我在Polymer Dart中完成了一个自定义按钮组件:
<div id="buttonDiv">
<my-button id="traceButton"
mode="icon" faicon="fa-comment-o"
toolTip="Print a simple comment"
disabled="false" on-click="{{ traceSomething }}">
</my-button>
</div>
我正在尝试将此按钮复制/粘贴到其他位置。因此,用户将其定义为somwhere,我基本上通过获取$['buttonDiv'].children
然后将其插入其他地方来移动它。问题是{{ traceSomething }}
现在无关紧要,因为它不是新父母的一部分。我得到错误,说父对象,这是另一个聚合物组件没有实例getter“traceSomething”。
我的问题是,在我将其插入其他地方之前,有没有办法删除“traceSomething”?我尝试删除“onClick”事件侦听器,但按钮仍然希望在单击时调用该函数。另外,我尝试添加一个preventDefault等,如:In Dart, if I listen to a click event with two listeners, how do I know which happens first? 但是,没有运气。
答案 0 :(得分:1)
我不确定你的意思是复制/过去。你是克隆元素,还是只是将它附加到其他元素子元素上。
无论如何,如果以声明方式添加事件监听器,我认为你不能删除它。如果你强制添加它,以后很容易删除和读取。
import 'dart:async';
...
StreamSubscription subsc;
@override
attached() {
super.attached();
subscr = onClick.listen((e) => (this.parentNode as ShadowRoot).host.traceSomething(e));
}
@override
detached() {
super.detached();
if(subscr != null) {
subscr.cancel();
}
}
另见https://stackoverflow.com/a/22168745/217408关于访问Polymer元素的父元素(对于Dart Polymer&lt; = 0.16.x)