【发布时间】:2015-01-02 20:11:23
【问题描述】:
我在一个项目中使用Polymer。我有一个通用的自定义元素来封装我的整个项目,我们称之为<my-app></my-app>。我希望每当一个按钮(<paper-button>,<paper-item>,<my-custom-clickable-item>,...)播放声音。声音的播放是没有问题的,但是我不太清楚如何将函数有效地绑定到我想要的所有元素上。
我知道有一种方法可以到达 fire custom events,但如果 <my-custom-clickable-item> 会在另一个元素 <another-custom-element> 中,我需要在那里捕获它并将其传递给 <my-app>,这并不是一个很好的选择解决方案。
除了只将声音绑定到按钮之外,理想的做法是根据项目是否具有disabled 属性来播放另一种声音。
这是我的应用外观的一些示例代码。
<polymer-element name="my-app">
<template>
<audio id="mySound" style="display: none;">
<source src="assets/mySound.wav" type="audio/wav">
</audio>
<paper-button>I make sound!</paper-button>
<my-custom-clickable-item>I make sound as well!</my-custom-clickable-item>
<paper-button disabled>I should make another sound though...</paper-button>
<just-another-element></just-another-element>
</template>
<script>
Polymer('my-app', {
makeNoise: function(){
this.$.mySound.play();
}
});
</script>
</polymer-element>
<polymer-element name="just-another-element">
<template>
<p>I am another custom element, with other buttons!</p>
<paper-button>Sound sound sound</paper-button>
</template>
<script>
Polymer();
</script>
</polymer-element>
【问题讨论】:
-
如果您的
触发了一个事件,它应该冒泡到您的应用程序的根目录或 。如果您在我的应用程序上设置了一个监听器并在 中触发一个自定义事件,那么 中的监听器应该会捕获它。 -
@user2210274: 以及
<just-another-element>中的<paper-button>(或其他)怎么样? -
由于您想要播放不同的声音,因此您可以在使用正确的声音触发事件时附加一个自定义对象,然后在父元素中以相同的方式处理它。
var temp = { sound = 'path' }; this.fire('customEvent', temp);
标签: javascript binding polymer shadow-dom