我在项目中使用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)项目之后重新计算喜欢的数量。建议的方法是什么?
答案 0 :(得分:1)
正如您所观察到的(!),您无法设置在更改数组中对象的属性时触发的*Changed
个处理程序。只有在dataChanged
数组中添加或删除对象时,才会触发现有的data
处理程序,而不是现有对象的属性发生更改。
我将一个Polymer元素<observe-array-items>
组合在一起,可以观察数组中项目特定属性的变化。您可以直接使用它,也可以复制逻辑。
一旦您的dataChanged
处理程序正确启动,您可以维护一个计数器来跟踪收藏夹的数量(如果跟踪它对您的应用程序有用)或使用类似{{{ 3}}查看是否有任何设置了favorite
的对象。
类似的东西:
dataChanged: function() {
this.atLeastOneFavorite = this.data.some(function(item) {
return item.favorite;
});
}