2014-10-03 57 views
2

我想要做的是改变基于水疗路线的龙头调用功能。以下是我已经尝试(自定义元素内工作)动态改变龙头属性

this.$.menuButton.attr['on-tap'] = "{{newFunction}}"; 

this.$.menuButton.on-tap = "{{newFunction}}"; 

以及许多其他的尝试无一奏效。我如何更改包含名称的属性的值?如果这是不可行的,那么推荐的方法是动态改变on-tap函数?

+0

使用点符号,你不能有一个连字符,所以你必须在这里保留括号记号。我不知道聚合物,但你不能只分配事件的函数参考? – 2014-10-03 16:20:11

+0

你确定它不是'ontap'吗? 'onXXX'属性通常不会有任何标点符号。 – Barmar 2014-10-03 16:21:10

+0

是的,我确定这个属性是点击(这是一个聚合物)。我想我可以创建一个新的函数来触发一个事件,并听取该事件并改变该函数在那里的功能。 – 2014-10-03 16:41:20

回答

2

而不是on- *声明式事件映射,您应该使用事件侦听器。

this.addEventListener('tap', this.myFunction); 
this.addEventListener('tap', this.newFunction); 

它基本上是一样的东西。但是,如果你需要(event, detail, sender)的论点,你必须自己通过它们。

API Reference

+0

这是我计划使用的方法,我可能会回来。我将首先给出声明路线。谢谢你的回答。 – 2014-10-03 17:08:46

+0

不客气。我肯定会跟Eric Bidelman所说的一样。名人,jeez ... :) – Ben 2014-10-03 17:09:51

+0

尝试声明性方法后,我决定去用这个eventListener方法。主要是因为我已经使用类似的eventListeners来更改我的应用程序中的另一个链接。 (这个变化是通过我的一个自定义元素的一个循环),所以我会有我的on-tap火灾事件,我可以在我的main.js中侦听,然后更改基于应用程序路由调用的函数。这样我可以避免需要发件人更改处理程序。我想用其他方法来保持尽可能多的自定义元素。但缺乏耐心再次胜出。 – 2014-10-03 19:15:32

3

如果你想要去的声明路线,你仍然可以使用on-*处理程序和数据绑定到翻转处理程序:

<p on-tap="{{handler}}">Tap me to see what handler is set.</p> 
<button on-click="{{setHandler}}" data-handler="oneHandler">Set Handler 1</button> 

ready: function() { 
    this.setHandler(); 
}, 
setHandler: function(e, detail, sender) { 
    this.handler = !sender ? this.defaultHandler : 
          this[sender.dataset.handler]; 
}, 
defaultHandler: function() { 
    alert('default handler'); 
}, 
oneHandler: function() { 
    alert('one handler'); 
} 

http://jsbin.com/forame/1/edit