对一个可观察数组进行排序,该数组具有由 breezeJS 返回的查询数据
Sorting an observable array, which has queried data returned by breezeJS
上图是使用breezeJS(使用EntityManager)查询数据库时出现的observableArray。
我的问题是
how do we sort this observable based on some criteria i.e.,
(object.attributeName) ?
所以这个数组是根据一些属性名称排序的,我们可以简单地使用 foreach 绑定中的 observable 并以排序的方式使用它们,因为我不想一直查询(本地或从服务器)来获取数据已排序。
所以做一个计算
var orderDirection = ko.observable(1);
var orderField = ko.observable("id");
var orderedObsArr = ko.computed(function(){
var oDir = orderDirection();
var oField = orderField();
var newArr = originalObsArr().slice(0);
newArr.sort(function(a,b){
return oDir * (a[oField] > b[oField] ? 1 : -1);
});
return newArr;
});
所以要更改为按 name
降序排序,您只需更改:
orderDirection(-1);
orderField("name");
并且您计算的受抚养人 orderedObsArr
将被更新。
有关工作示例,请参阅 this pen。
上图是使用breezeJS(使用EntityManager)查询数据库时出现的observableArray。
我的问题是
how do we sort this observable based on some criteria i.e., (object.attributeName) ?
所以这个数组是根据一些属性名称排序的,我们可以简单地使用 foreach 绑定中的 observable 并以排序的方式使用它们,因为我不想一直查询(本地或从服务器)来获取数据已排序。
所以做一个计算
var orderDirection = ko.observable(1);
var orderField = ko.observable("id");
var orderedObsArr = ko.computed(function(){
var oDir = orderDirection();
var oField = orderField();
var newArr = originalObsArr().slice(0);
newArr.sort(function(a,b){
return oDir * (a[oField] > b[oField] ? 1 : -1);
});
return newArr;
});
所以要更改为按 name
降序排序,您只需更改:
orderDirection(-1);
orderField("name");
并且您计算的受抚养人 orderedObsArr
将被更新。
有关工作示例,请参阅 this pen。