Polymer 向子数组添加项时,嵌套的dom重复模板不会更新 上下文

Polymer 向子数组添加项时,嵌套的dom重复模板不会更新 上下文,polymer,Polymer,我正在制作一个显示项目列表的页面。该页面列出从最新到最旧的项目,并首先按年份然后按月份进行分类。它看起来类似于以下示例: 2019 行军 列表项 清单项目2 二月 清单项目3 2018 十月 清单项目4 清单项目5 清单项目6 五月 清单项目7 HTML的简化版本为: [[年份名称]] 我让它工作了。对于聚合物来说,它并没有那么优雅,或者可能没有那么惯用,但它是有效的,所以我在这里分享它 我创建了一个items属性,用于存储所有项目。然后,当我加载一批新项目时,我将新项目推送到现有项目数组中,

我正在制作一个显示项目列表的页面。该页面列出从最新到最旧的项目,并首先按年份然后按月份进行分类。它看起来类似于以下示例:

2019 行军

列表项 清单项目2 二月

清单项目3 2018 十月

清单项目4 清单项目5 清单项目6 五月

清单项目7 HTML的简化版本为:

[[年份名称]]
我让它工作了。对于聚合物来说,它并没有那么优雅,或者可能没有那么惯用,但它是有效的,所以我在这里分享它


我创建了一个items属性,用于存储所有项目。然后,当我加载一批新项目时,我将新项目推送到现有项目数组中,并再次重建整个年份数组。

我让它工作起来了。对于聚合物来说,它并没有那么优雅,或者可能没有那么惯用,但它是有效的,所以我在这里分享它


我创建了一个items属性,用于存储所有项目。然后,当我加载一批新项目时,我会将新项目推送到现有项目数组中,并再次重建整个年份数组。

据我所知,您正在更改现有数组,这意味着更改后的数组与以前的数组没有任何区别。。。因为它们都是相同的数组引用,耶

您需要1创建一个新数组并让它用this.set替换新数组,2克隆您修改的数组–通过JSON.parseJSON.stringifyarr–并将其设置为this.set,3使用this.splice,因为从理论上讲,这应该是可行的,或者4执行您所做的操作:用空数组重置数组,然后用您修改的数组替换它

dom repeat中的数组子属性更新是Polymer 2及更高版本中修复的问题,因为它们删除了脏检查

还有一件小事,但不要在循环中创建变量。在for循环内部创建新变量,而不是在外部创建一个变量,然后在循环内部重用,这是一种最小的时间损失

    // Your code
  for (var j = 0; j < newItems.length; j++) {
    var item = newItems[j];
    this.setMonthAndYear(item, tempYearsArray);
  }

    // My suggestion
  var item;

  for (var j = 0; j < newItems.length; j++) {
   item = newItems[j];
   this.setMonthAndYear(item, tempYearsArray);
  }

据我所知,你正在改变现有的阵列,这意味着你改变的阵列和之前的阵列没有任何区别。。。因为它们都是相同的数组引用,耶

您需要1创建一个新数组并让它用this.set替换新数组,2克隆您修改的数组–通过JSON.parseJSON.stringifyarr–并将其设置为this.set,3使用this.splice,因为从理论上讲,这应该是可行的,或者4执行您所做的操作:用空数组重置数组,然后用您修改的数组替换它

dom repeat中的数组子属性更新是Polymer 2及更高版本中修复的问题,因为它们删除了脏检查

还有一件小事,但不要在循环中创建变量。在for循环内部创建新变量,而不是在外部创建一个变量,然后在循环内部重用,这是一种最小的时间损失

    // Your code
  for (var j = 0; j < newItems.length; j++) {
    var item = newItems[j];
    this.setMonthAndYear(item, tempYearsArray);
  }

    // My suggestion
  var item;

  for (var j = 0; j < newItems.length; j++) {
   item = newItems[j];
   this.setMonthAndYear(item, tempYearsArray);
  }

很好的解释,谢谢。我们正在从Polymer 1.x更新我们的代码,所以希望这不是一个问题。谢谢你的Javascript提示。这段代码实际上是用Coffescript编写的,所以我必须复制并删除已编译的js代码。我相信编译后的代码符合您的建议,但我想复制更少的行,这就是为什么代码不是最优雅的。非常好的解释,谢谢。我们正在从Polymer 1.x更新我们的代码,所以希望这不是一个问题。谢谢你的Javascript提示。这段代码实际上是用Coffescript编写的,所以我必须复制并删除已编译的js代码。我相信编译后的代码符合您的建议,但我希望复制的行数更少,这就是为什么代码不是最优雅的。