我在使用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>
问题是每个文件夹都成为最后一个文件夹的子文件,而不是他自己的文件夹。
答案 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]]