通过KnockoutJS Array迭代搜索查询

时间:2017-09-08 04:55:23

标签: javascript arrays google-maps sorting knockout.js

如何对KO observableArray()进行实时更新排序,并对每个被排序的对象执行一个函数,并对剩余的对象执行另一个函数?

所以我有observableArray() Google地图标记。 100+,所以我试图找出一个分类系统,根据它是否与特定的过滤器匹配来显示或隐藏标记。我已经将knockoutJS用于应用程序中的绝大多数数据位,所以我试图弄清楚如何最好地实现它。我可以逐步浏览数组并通过gMarkers()[i].title获取标题,但我不确定如何相互过滤这些项observable()

我已创建userQuery()来接受输入,因此我可以使用它进行排序。我认为这必须通过ko.computed()完成,但我不确定如何最好地更新它,因为当人们输入(更改userQuery())时,它会随时发生变化。

是否有一种轻量级的方法来迭代数组并根据排序对每个结果执行一个函数,还是应该以不同的方式接近它?

1 个答案:

答案 0 :(得分:0)

使用(纯)计算:

/// .... in your viewmodel ....
this.filteredData = ko.pureComputed(function() {
     // query all observables the outcome depends on
     var query = self.userQuery();
     var ...   = ... 

     var fData = []; 
     // iterate over your dataset or use ko.utils.map / ko.utils.filter
     for (...) { 
         fData.push(...); 
     }
     return fData;
});

只要您依赖任何可观察的变化,计算将重新计算。小心不要在依赖项中引入循环。