我有一个计算属性,应该像这样排序&fiter:
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(),
Run Code Online (Sandbox Code Playgroud)
我正在使用该属性作为CollectionView的数据源
如果我更改其中一个子项的order属性,则不会重新评估此属性.换句话说,在执行以下操作后,我看不到console.log行:
child.set("order",10);
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
终于明白了这一点...
我认为 @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(),
Run Code Online (Sandbox Code Playgroud)