Polymer execute complete dom-repeat after immediately dirty checking and assigning

Polymer execute complete dom-repeat after immediately dirty checking and assigning

我有一个包含子属性的数组,子属性又是对象和子数组。

当我从服务器收到 API 响应时,我曾经使用 dom-repeat 显示该响应,当我收到另一个相同格式的 API 响应并稍作更改时在它的值中,我将用新数组替换我的旧数组,并进行脏检查,如

<template is="dom-repeat" items="{{arr}}">
 //paper list codes for display
</temlate>

  this.arr = [];
  this.arr = newArrayFromResponse;

但是当我这样做时,只有一些纸质列表会更新,其值已更改, dom-repeat 不会创建所有节点,它只会更新那些值已更改的节点。

当我像 this.arr = [] 一样清除数组时;在这种情况下,它将销毁所有节点,

但如果我立即再次重新分配,它只会更新节点。

如何清除所有节点并从头开始执行dom-repeat? 我尝试了 polymers array mutation 和 render() function 并 reffered https://github.com/Polymer/polymer/issues/4041 没有用!! 每次。

我需要渲染dom-以与第一次渲染类似的方式重复,比如空白屏幕和立即渲染

我认为 Polymer 检测到一些值没有改变并且发生了一些性能优化。您可以尝试异步设置新值。

this.arr = [];

this.async(function() {
    this.arr = newArrayFromResponse;
});

为什么这行得通而您的代码不行?要确切知道,我们需要查看 Polymer 代码。我的猜测是 Polymer 不会在每次分配给 this.arr 后立即更新 DOM,而是稍后更新。当它确实更新时,在您的解决方案中 this.arr = newArrayFromResponse 已经发生并且永远不会呈现空数组。 Polymer 可能仍然有旧数组的副本,并意识到它与一些新项是同一个数组,只是添加了新项。我的解决方案引入了一个微小的延迟。所以 Polymer 会渲染空数组,然后才渲染新数组。