如何从自定义Polymer组件中删除“on-click”

时间:2015-11-20 00:58:26

标签: dart dart-polymer

我在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? 但是,没有运气。

1 个答案:

答案 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)