Я использую Polymer по проекту. У меня есть общий пользовательский элемент, который инкапсулирует весь мой проект, назовем его <my-app></my-app>
. Я хочу, чтобы всякий раз, когда кнопка (<paper-button>
, <paper-item>
, <my-custom-clickable-item>
, ...) воспроизводится звук. Воспроизведение звука не проблема, но я не совсем знаю, как эффективно привязывать функцию ко всем элементам, которые я хочу.Javascript Binding Function to Shadow DOM и пользовательские элементы
Я знаю, что есть способ 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>
Если ваш запускает событие, оно должно появиться до корня вашего приложения или . Если вы настроили слушателя в моем приложении и запустили пользовательское событие в , слушатель в должен его поймать. –
andrsnn
@ user2210274: а как насчет '' (или что-то еще) в ''? –
jdepypere
Поскольку вы хотите, чтобы разные звуки воспроизводились, вы можете прикрепить специальный объект, когда вы запускаете событие с правильным звуком, а затем обрабатываете его таким же образом в родительском элементе. 'var temp = {sound = 'path'}; this.fire ('customEvent', temp); ' – andrsnn