繁体   English   中英

使用新数据完全重置dom-repeat元素

[英]Completely reset a dom-repeat element with new data

<dom-repeat>偶尔会尝试变得比自己需要的聪明,这会导致属性绑定问题,导致回收的元素显示陈旧或重复的数据。

不管您尝试多少this.splice()this.push()它的效果似乎都比浪费周期多,因为它的效果为零。

在这一点上,做任何文档告诉您的事情-等于是试图找出奥秘绑定到子属性和子数组的正确组合,以及观察者触发的变能器使黑魔法起作用,似乎浪费了努力,擦拭石板并从新状态重建元素会更快,更轻松。 那么如何才能做到这一点呢?

尽管此主题以前没有答案,但事实证明,重置<dom-repeat>非常容易。 只需将<dom-repeat>包装在与reset属性绑定的<dom-if>中,该属性可以根据需要自由地用于杀死和重建<dom-repeat>

首先,我们定义需要重置的数据。

<iron-ajax id="retrieveData"
           method="get"
           url="/api/data"
           handle-as="json"
           on-response="_handleData">
</iron-ajax>
<template is="dom-if" if="[[!_reset]]">
  <template is="dom-repeat" items="[[veryComplicatedObjects]]">
    <my-complicated-custom-element content={{item}} on-change="_remoteChanged"/>
  </template>
</template>

现在我们编写事件处理程序

_remoteChanged() {
  // trigger retrieval of new data
  this.$.retrieveData.generateRequest()
}

_handleData(e) {
  // kill dom-repeat
  this.setProperties({
    veryComplicatedObjects: []
  })
  this._reset = true

  // reconstruct dom-repeat
  this.setProperties({
    veryComplicatedObjects: e.detail.response
  })
  this._reset = false
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM