Сортировка списка в EmberJS и отображение этого в представлении - PullRequest
5 голосов
/ 22 января 2012

У меня есть вычисляемое свойство, которое должно сортироваться и соответствовать так:

sortedFilteredChildren: function() {
        console.log("sortedFilteredChildren()");
        var filtered = this.get("children").filterProperty("archived",false);
        var sorted = filtered.slice().sort(function(a,b){
            return a.get("order") - b.get("order");
        });
        return sorted;
}.property("@each.order","@each.parent_id","EpicApp.filterOptions.viewArchived").cacheable(),    

Я использую это свойство в качестве источника данных CollectionView

Если я изменю свойство порядка одного из его дочерних элементов, это свойство не будет переоцениваться. Другими словами, я не вижу строки console.log, появляющейся после выполнения:

child.set("order",10);

Есть идеи, что я делаю не так?

1 Ответ

4 голосов
/ 23 января 2012

Наконец-то понял это ...

Я думал, что @each применяется к возвращенному значению. т. е. если какое-либо из свойств заказа для объектов в возвращаемом значении изменилось, выполните повторную оценку.

Но это не правильно . @each применяется к объекту, на котором находится вычисляемое свойство.

Так что, чтобы сделать то, что мне было нужно, я должен был написать "children. @ Each.order"

sortedFilteredChildren: function() {
    console.log("sortedFilteredChildren()");
    var filtered = this.get("children").filterProperty("archived",false);
    var sorted = filtered.slice().sort(function(a,b){
        return a.get("order") - b.get("order");
    });
    return sorted;
}.property("children.@each.order","children.@each.parent_id","EpicApp.filterOptions.viewArchived").cacheable(),    
...