聚合物嵌套 dom-重复

Polymer nested dom-repeat

我在使用 Polymer 的 <dom-repeat> 时遇到了一些问题。

我有父对象(文件夹)和子对象(文件夹的内容)。两者都是根据对 AJAX 请求的响应计算得出的。

结果应该是这样的:

Folder

  • child
  • child
  • child

我的代码:

<iron-ajax id="folder" url="../Folder" auto last-response="{{folders}}"></iron-ajax>

<template is="dom-repeat" items="{{folders.items}}" as="folder">
  <paper-card  on-tap="openFolder" object item="[[folder]]">

    <custom-object value="[[folder]]" link></custom-object>
     
    <iron-ajax id="folder" url="..[[folder.id]]/children" auto last-response="{{children}}"></iron-ajax>

    <template is="dom-repeat" items="{{children.items}}" as="children"> 
      <custom-object style="margin-top: 15px" value="[[children]]" link></custom-object>
    </template>

  </paper-card>
</template>

问题是每个文件夹都成为最后一个文件夹的子文件夹,而不是他自己的文件夹。

您的内部 iron-ajax 在转发器的每次迭代中写入相同的 children 属性。转发器不限定 属性 的范围,它实际上对每次迭代和转发器外部的整个模板都是可见的。后续迭代可能会覆盖上一次迭代的 children,这表现为意外的文件夹嵌套。

解决此问题的一种方法是通过将 children 属性 附加到迭代器(即本例中的 folder )来将其限定在每次迭代中。为避免与实际的 属性 发生潜在的名称冲突,最好为其添加前缀(例如 folder._children),如本例所示:

<iron-ajax id="folder" url="../Folder" auto last-response="{{folders}}"></iron-ajax>

<template is="dom-repeat" items="{{folders.items}}" as="folder">
  <paper-card  on-tap="openFolder" object item="[[folder]]">

    <custom-object value="[[folder]]" link></custom-object>


    <!--
        attach a new property `_children` to `folder` to contain the response for this folder
    -->
    <iron-ajax url="..[[folder.id]]/children" auto last-response="{{folder._children}}"></iron-ajax>


    <template is="dom-repeat" items="{{folder._children.items}}" as="children"> 
      <custom-object style="margin-top: 15px" value="[[children]]" link></custom-object>
    </template>
  </paper-card>
</template>