聚合物多重铁塌陷

时间:2016-06-23 14:00:38

标签: javascript polymer polymer-1.0

聚合物文档尚未明确如何使用铁坍塌创建多重切换。是否有一种简单的方法可以让每个项目切换?我看了multiple iron-collapse not working, expands only first,但我无法让它发挥作用。从那时起,聚合物可能发生了变化。下面是我正在使用的代码示例。

<div on-click="toggle"><paper-item><a class="paper-item-link"><strong>List Items</strong></a></paper-item></div>
<iron-collapse id="collapse">
<div>Content</div>
</iron-collapse>

<div on-click="toggle"><paper-item><a class="paper-item-link"><strong>List Items</strong></a></paper-item></div>
<iron-collapse id="collapse">
<div>Content</div>
</iron-collapse>

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

1 个答案:

答案 0 :(得分:0)

Polymer的automatic node finding按其ID映射节点,但是您有两个具有相同ID的节点,因此只有遇到的最后一个节点将映射到该ID(即,this.$.collapse指向第二个{在你的例子中{1}}。此外,由于您的iron-collapse - 处理程序引用相同的click,因此iron-collapsepaper-item会在点击时切换相同的iron-collapse

最快的解决方案是为每个iron-collapse使用唯一的节点ID,并使用唯一的click处理程序:

<head>
  <base href="https://polygit.org/polymer+v1.9.2/components/">
  <script src="webcomponentsjs/webcomponents-lite.js"></script>
  <link rel="import" href="paper-item/paper-item.html">
  <link rel="import" href="iron-collapse/iron-collapse.html">
</head>
<body>
  <x-foo></x-foo>

  <dom-module id="x-foo">
    <template>
      <div on-click="toggle1">
        <paper-item>
          <a class="paper-item-link"><strong>List Items</strong></a>
        </paper-item>
      </div>
      <iron-collapse id="collapse1">
        <div>Content</div>
      </iron-collapse>

      <div on-click="toggle2">
        <paper-item>
          <a class="paper-item-link"><strong>List Items</strong></a>
        </paper-item>
      </div>
      <iron-collapse id="collapse2">
        <div>Content</div>
      </iron-collapse>
    </template>
    <script>
      HTMLImports.whenReady(function() {
        Polymer({
          is: 'x-foo',
          toggle1: function() {
            this.$.collapse1.toggle();
          },
          toggle2: function() {
            this.$.collapse2.toggle();
          }
        });
      });
    </script>
  </dom-module>
</body>

codepen