将重复模板内的两种聚合物组分的参数结合

时间:2015-02-03 23:44:54

标签: html5 data-binding polymer web-component

我想在以下示例中绑定attrattr1。这两个参数不依赖于data(其他属性)。以这种方式使用绑定时,所有“行”之间只有一个共享数据对象。我只希望将一次迭代的两个组件绑定在一起。

<template repeat"{{data in dataList}}">
    <component1 attr="{{binding}}" />
    <component2 attr2="{{binding}}" />
</template>

我的第一个想法是将属性绑定到data对象的变量:

<template repeat"{{data in dataList}}">
    <component1 attr="{{data.binding}}" />
    <component2 attr2="{{data.binding}}" />
</template>

另一方面,这个解决方案非常难看,因为模型对象只能附加查看数据。由于模型的寿命通常比组件长,因此可能会产生巨大的开销。另一个问题是序列化,由于附加数据可能会失败。

有没有优雅的解决方案?到目前为止,我唯一想到的是在迭代数据集之前包装数据对象。另一方面,这种方法可能会使模型更新出现问题......

天真的想法:不应该只是在仅限于此模板的模板中使用的变量的范围?在重复模板的特殊情况下进一步迭代?

1 个答案:

答案 0 :(得分:0)

您可以输入 - 建议您的binding变量为Object,并将其用作:

<polymer-element name="my-element" attributes="dataList">
  <template>
    <ul>
      <template repeat="{{d in dataList}}">
        <li>
          {{d}} ⇒ {{binding[d]}} <!-- Since type-suggested, it works -->
        </li>
      </template>
    </ul>
  </template>

  <script>
    Polymer({
      dataList: ['navy', 'maroon'],
      binding: {} /* it’s necessary to type-suggest var for Polymer */
    });
  </script>
</polymer-element>

请注意,上面的代码段需要dataList中的不同内容。实时预览:http://plnkr.co/edit/ez36BVUPCKW8xRSkGxOM?p=preview

  

天真的想法:不应该只是在仅限于此模板的模板中使用的变量的范围吗?在重复模板的特殊情况下还有一次迭代吗?

这听起来对我来说是不可能的,因为(除了这会使实现过于复杂)有时候想要在嵌套模板中绑定变量:

<template repeat="{{a in lst}}">
  {{bound_here}}
  <template id="nested">
    {{bound_here}}
  ...

根据你的建议,上面的绑定变得不可能。