2016-12-13 5 views
0

У меня есть этот РОМ повторить шаблон в полимереForce весь шаблон повторного рендеринг при изменении данных в РОМЕ повторе

<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

Я не совсем уверен, что следую за вами на 100%, но вы можете попробовать использовать restamp на dom-repeat, заставляя его уничтожать и воссоздавать элементы каждый раз, когда item.children изменяется. Игнорировать это, сменить отметки работает фактически только на дом, если

Рендер будет синхронно заставить рендеринга изменения, как правило, будет сделано в асинхронном режиме, но это только поднимает изменения, сделанные через API Polymer, так что вы можете захотеть, чтобы убедиться, изменения, внесенные в ваш item.children, выполняются через API-интерфейс Polymer, а не только с помощью встроенной функции массива (т. е. настройка вещи должна делать что-то вдоль линии this.push ('theArray', newItem) вместо обычного aArray.push (newItem)).

Edit: для дальнейшего уточнения:

  • вызова делают «просто» силы, чтобы повторно вынести изменения синхронно, но это не должно заставить рендеринга больше материала, чем обычные асинхронные рендеринга
  • ваш вопрос, вероятно, происходит от того, как обновляется массив. Используйте this.splice, this.push, this.pop, this.unshift или this.shift для изменения вашего массива. Link to the doc

 Смежные вопросы

  • Нет связанных вопросов^_^