【问题标题】:Bind parameters of two polymer components inside repeat template重复模板内两种聚合物组分的结合参数
【发布时间】:2015-04-03 08:38:34
【问题描述】:

我想在下面的例子中绑定attr 和attr1。这两个参数不依赖于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>

另一方面,这个解决方案真的很难看,因为模型对象获取了附加的仅查看数据。因为模型的寿命通常比组件长,这可能会导致巨大的开销。另一个问题是序列化,可能会因为附加数据而失败。

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

天真的想法:不应该是仅在模板内部使用的变量的范围限制为该模板吗?在重复模板的特殊情况下,还要进行一次迭代?

【问题讨论】:

    标签: html data-binding polymer web-component


    【解决方案1】:

    您可以键入建议您的 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>
    

    请注意,上面的 sn-p 需要 dataList 中的不同项目。实时预览:http://plnkr.co/edit/ez36BVUPCKW8xRSkGxOM?p=preview

    天真的想法:不应该是仅在模板内部使用的变量的范围限制为该模板吗?在重复模板的特殊情况下还要进行一次迭代?

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

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

    根据您的建议,上述绑定变得不可能。

    【讨论】:

    • 感谢您的出色解决方案。我稍微更改了您的代码,以独立于实际数据:制作 bindings 一个数组并在重复模板中使用 index 变量。 plnkr.co/edit/eK0aLn4Tk29MxnkE7GZz?p=preview
    • 很高兴您发现此解决方案很有帮助。当然,使用index 一般更好;我只是显示了模式。
    • 这种语法在 Polymer 1.0 中是否有效?我有一个类似的问题,我绊倒stackoverflow.com/questions/35001873/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多