2015-11-20 85 views
1

“上单击”删除在聚合物达特做一个自定义按钮组件:我如何从一个自定义的聚合物组分

<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> 

我试图复制/粘贴此按钮别处。所以用户定义了它,我基本上通过获取$['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

我不确定你的意思是复制/过去。你是否克隆了这个元素,或者你只是将它附加到其他元素的子元素中。

无论如何,我不认为你可以删除事件侦听器,如果它被声明添加。如果您强制性地添加它,则很容易在稍后删除和读取。

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有关访问聚合物元素的父(在DART聚合物< = 0.16.x)

+0

嗯,在我的情况,我想从一个div的子元素,而“移动“他们在其他地方.... 喜欢: 列表 origen = $ ['buttonDiv']。children; // Then origen.forEach((c)=> $ ['newHome']。children.add(c)); –