我在聚合物中有这个dom-repeat模板
<template is="dom-if" if="true">
<typeahead items="{{item.children}}"></typeahead>
</template>
<template is="dom-repeat" id="level" items="{{item.children}}">
<li on-click="itemClickHandler" id$="[[getItemId(item)]]" class$="{{isItemSelected(item, selectedItem)}}" >
<template is="dom-if" if="[[!toShowColumnTypeahead()]]"><span>{{getItemLabel(item)}}</span></template>
<template is="dom-if" if="[[toShowColumnTypeahead()]]">
<template is="dom-if" if="[[!item.searchTerm]]" restamp="true">
<span class="f">{{getItemLabel(item)}}</span>
</template>
<template is="dom-if" if="{{item.searchTerm}}" restamp="true">
<span class="">{{item.currentSearchLabel.prefix}}<span class="bold">{{item.currentSearchLabel.highlight}}</span>{{item.currentSearchLabel.suffix}}</span>
</template>
</template>
<button class$="[[getItemOpenerClass(item)]]" on-click="openClickHandler" key$="[[getItemId(item)]]">Open</button>
<template is="dom-if" if="{{_hasChildren(item, showChevron)}}">
<span class="chevron"><i class="fa fa-angle-right"></i></span>
</template>
</li>
</template>
item.children的数据正在从先行聚合物组件变为通知它。但是,如果items.children被修改并且仍然是之前结果的一部分,那么它是not redrawn on dom
,I want it to be redrawn on DOM every time
列表中有任何更改,无论它是否是先前更改的一部分。现在Polymer只重绘DOM上更改的元素。我通过this.set
从manually calling the render
到query selecting the template
方法从网上尝试了很多东西。
答案 0 :(得分:0)
我不完全确定我会100%跟踪你,但你可以尝试在dom-repeat上使用restamp
,强制它在每次更改item.children时销毁并重新创建元素。罢工>
忽略这一点,restamp实际上只适用于dom-if
渲染将同步强制渲染通常异步完成的更改,但它只会获取通过Polymer API进行的更改,因此您可能希望确保对您的item.children所做的更改是通过Polymer API进行的而不只是本机数组函数(即设置它应该在this.push('theArray',newItem)的行上做的事情,而不是通常的theArray.push(newItem))。
编辑:进一步澄清:
this.splice
,this.push
,this.pop
,this.unshift
或this.shift
来改变您的数组。 Link to the doc