在 dom-repeat 模板内的纸按钮中执行事件

Perform event in the paper-button inside a dom-repeat template

我有以下元素:

<dom-module id="my-blogentry">
<template>
    <style>
        :host {
            display: block;
        }
        .div-general{
      </style>
    <div class="div-general">
        <template is="dom-repeat" items="{{entries}}">
            <paper-material elevation="1" animated="true" class="paper-material-presentation">
                <div class="div-date-left">
                    <span>{{item.date}}</span>
                </div>
                <div>
                    <iron-image src$="../../images/{{item.image}}" style="width:128px; height:128px;" sizing="cover"></iron-image>
                    {{item.resume}} 
                    <paper-button id="bt_readmore" on-tap="toggle">Read More</paper-button>
                    <iron-collapse id="collapse">
                      <div>{{item.content}}</div>
                    </iron-collapse>
                </div>
            </paper-material>
        </template>
    </div>
</template>
<script>
    Polymer({
        is: 'my-blogentry',

        ready: function() {
            this.entries = [
                {id: '1', title: ‘xxx.', date: 'Tuesday, March 8, 2016', image:'im-blogdefault.png', resume:’xxx’,content:’xxxx’}
            ];
          },

        toggle: function () {
            this.$$('#collapse').toggle();
        }
    });

</script>

如果您可以查看元素代码,我在 <template dom-repeat> 中有一个 iron-collapse 元素和一个按钮。我的建议是用户可以点击按钮并切换按钮以打开折叠元素。

问题是我的代码在打开第一个项目时工作正常,但是当我在列表中有更多项目并且我按下第二个项目按钮时,第一个和第二个折叠也打开了。

我正在搜索论坛中的其他帖子,我发现了这个:
Documentation 这个例子修改了模型中的项目,但没有 DOM 它是我需要的(切换我的 iron-collapse 元素)。

如有任何帮助,我将不胜感激。

这是因为在您的代码中所有 <iron-collapse> 得到相同的 id="collapse"

您可以将 entries 中的一些值添加到 <paper-button><iron-collapse> 中,或者尝试从按钮单击事件中获取 DomRepeatModel 以找到正确的值崩溃。

使用来自 entries 的唯一 id 属性 的示例代码(我假设它有一个):

<paper-button ident$="{{entries.id}}" on-tap="toggle">Read More</paper-button>
<iron-collapse ident$="{{entried.is}}">
    toggle: function (event) {
        this.$$('[ident="' + event.target.getAttribute('ident') + '"]').toggle();
    }

这是解决方案,我将id分配给了铁塌陷标识符,关键是在id属性中使用符号$

<template is="dom-repeat" items="{{entries}}">
            <paper-material elevation="1" animated="true" class="paper-material-presentation">
                <div class="div-date-left">
                    <span>{{item.date}}</span>
                </div>
                <div class="div-entry-resume">
                    <iron-image src$="../../images/{{item.image}}" style="width:128px; height:128px;" sizing="cover"></iron-image>
                    {{item.resume}} 
                    <iron-collapse id$="collapse{{item.id}}">
                      <div>{{item.content}}</div>
                    </iron-collapse>
                    <div class="div-entry-bottom">
                        <paper-button id$="bt_readmore" on-tap="toggle">Read More</paper-button>
                    </div>
                </div>
            </paper-material>
        </template>

和聚合物函数:

toggle: function (event, detail, sender) {
            var id = event.model.item.id;
            var selector = '#collapse' + id;
            this.$$(selector).toggle();
        }

感谢@Günter Zöchbauer 在这方面的帮助。