Переключить "бумажный диалог" внутри "повторяющегося домика"
У меня есть объект "бумага-диалог" на странице. Я могу переключать его кнопкой, если он не находится внутри цикла "dom-repeat". Но если я помещу это в цикл, "this.$. Dialog.toggle();" затем будет ссылаться на нуль.
<template is="dom-repeat" items="{{news}}" index-as"index">
<paper-dialog id="dialog"><h3>{{item.date}}</h3></paper-dialog>
<paper-button on-tap="toggleDialog">View {{item.name}}</paper-button>
</template>
а также
toggleDialog: function(e) {
this.$.dialog.toggle();
}
Есть идеи, почему "this. $. Dialog" становится пустым после помещения диалога в цикл?
2 ответа
this.$
не сработает Вы должны позвонить this.$$
который равен Polymer.dom(this.root).querySelector();
Кроме того, у вас есть несколько элементов с одинаковым идентификатором, что абсолютно не соответствует стандартам HTML.
Так что вы можете сделать что-то вроде:
<template is="dom-repeat" items="{{news}}" index-as"index">
<paper-dialog id="dialog" indexDialog$='[[index]]'><h3>{{item.date}}</h3>
</paper-dialog>
<paper-button on-tap="toggleDialog" index$='[[index]]'>View {{item.name}}
</paper-button>
</template>
и toggleDialog
toggleDialog: function(e) {
var index = e.target.getAttribute("index");
this.$$('[indexDialog="'+index+'"]').toggle();
}
Вы должны установить некоторую неопределенность (index
атрибут), то в функции вы можете получить этот атрибут, вызвав e.target.getAttribute
и последний шаг - найти paper-dialog
с тем же значением внутри indexDialog
приписывать по телефону this.$$('[indexDialog="'+index+'"]')
Я нашел свое решение, добавив "селектор массива", так что "бумажный диалог" за пределами цикла и имеет только 1 экземпляр. (и мы вводим в него разные данные).
<array-selector id="selector" items="{{news}}" selected="{{selected}}"></array-selector>
<paper-dialog id="dialog" entry-animation="scale-up-animation"
exit-animation="fade-out-animation">......
и с назначением внутри функции переключения
toggleDialog: function(e) {
var item = this.$.news.itemForElement(e.target);
this.$.selector.select(item);
this.$.dialog.toggle();
},