切换"纸张对话框"在一个" dom-repeat"

时间:2017-04-12 08:51:49

标签: polymer polymer-1.0 dom-repeat paper-dialog

我有一个"纸张对话框"页面中的对象。如果它不在" dom-repeat"中,我可以通过按钮切换它。环。但是,如果我把它放在一个循环中,"这个。$。dialog.toggle();"然后将引用null。

  <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();
    }

知道为什么&#34;这个。$。对话框&#34;将对话框放在循环中后变为null?

2 个答案:

答案 0 :(得分:2)

this.$无法工作。您必须致电this.$$,其等于Polymer.dom(this.root).querySelector();

此外,您有多个具有相同ID的元素,这绝对违反了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 :(得分:1)

我通过添加&#34;数组选择器&#34;找到了我的解决方案,所以&#34;纸张对话框&#34;在循环之外,只有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();
  },