聚合物嵌套dom-repeat

时间:2016-09-23 14:18:45

标签: javascript dom polymer repeater

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

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

结果应该是这样的:

  

文件夹

     
      
  •   
  •   
  •   

我的代码:

<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>

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

1 个答案:

答案 0 :(得分:1)

您的内部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> ),如下例所示:

Thermo_Col = df[:,[0]]