2015-06-18 2 views
0

Image of an observableArray coming while queryinq database using breezeСортировка наблюдаемый массив, который опрашивается данные, возвращаемые breezeJS

выше изображение имеет observableArray, который в то время как базы данных, поступающих с использованием queryinq breezeJS (используя EntityManager).

Мой вопрос заключается в том, что

как мы сортируем эти наблюдаемые на основе некоторых критериев, то есть, (object.attributeName)?

Так что этот массив сортируется на основании некоторого имени атрибута, и мы можем просто использовать наблюдаемое в Foreach привязок и использовать их в отсортированном образом, потому что я не хочу запросить все время (локально или с сервера) на получать данные в отсортированном порядке.

+0

try 'latestvalue(). Sort (function (a, b) {return a.someAttr()> b.someAttr()? 1: -1})', который должен работать. ура –

ответ

2

Так делают вычислен

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 для примера.

+0

Ницца. Просто хочу подчеркнуть ** значение obsArr(). Slice **: это гарантирует, что отсортированный массив является * копией * исходного массива, так что исходный массив остается неизменным по порядку. – Tyblitz

Смежные вопросы