聚合物计数元素内部具有特定属性的元素

时间:2014-12-08 15:07:59

标签: javascript arrays polymer

我在项目中使用Polymer。对于某个元素,我有一个数组作为输入。此数组包含JSON对象,例如bool favorite

如果没有任何对象被收藏,我想显示某条消息。我知道如何遍历 <template>内的数组,我知道如何使用filters,但是如何有效地执行此操作我不知道。

目前我的元素中有一个额外的对象,它通过循环来存储被收藏元素的数量,但这似乎非常低效。

dataChanged: function(){
    this.nrOfFavorites = 0;
    for(test in this.data){
        if(test.favorite){
            this.nrOfFavorites++;
        }
    }
}

另外,使用这个我有一些问题,在调用this.fire('dataChanged')的其他方法中没有调用函数,因此我不能在(de)项目之后重新计算喜欢的数量。建议的方法是什么?

1 个答案:

答案 0 :(得分:1)

正如您所观察到的(!),您无法设置在更改数组中对象的属性时触发的*Changed个处理程序。只有在dataChanged数组中添加或删除对象时,才会触发现有的data处理程序,而不是现有对象的属性发生更改。

我将一个Polymer元素<observe-array-items>组合在一起,可以观察数组中项目特定属性的变化。您可以直接使用它,也可以复制逻辑。

一旦您的dataChanged处理程序正确启动,您可以维护一个计数器来跟踪收藏夹的数量(如果跟踪它对您的应用程序有用)或使用类似{{{ 3}}查看是否有任何设置了favorite的对象。

类似的东西:

dataChanged: function() {
  this.atLeastOneFavorite = this.data.some(function(item) {
    return item.favorite;
  });
}