在EmberJS中对列表进行排序,并在视图中反映出来

时间:2012-01-22 17:01:08

标签: ember.js

我有一个应该排序的计算属性&像这样的人:

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的数据源

如果我更改其中一个孩子的order属性,则不会重新评估此属性。换句话说,在执行:

之后,我看不到console.log行
child.set("order",10);

知道我做错了吗?

1 个答案:

答案 0 :(得分:4)

最后想出来......

我认为@each已应用于返回的值。即,如果返回值中对象的任何订单属性发生变化,则重新评估。

不正确。 @each适用于计算属性所在的对象。

所以为了做我需要的,我必须做一个“孩子。@ 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(),