我有这样的事情:
Epic = Ember.Object.extend({
children:[],
children_filtered: function(){
return this.get("children").filterProperty("archived",false);
}.property("children"),
init: function() {
this._super();
this.set("children", Ember.ArrayController.create({content:[]}) );
this.set("stories", Ember.ArrayController.create({content:[]}) );
},
});
注意children_filtered computed属性。
如果我在视图中使用children_filtered ......
{{#each content.children_filtered }}
hi
{{/each}}
我的应用程序挂起cpu @ 100%
任何想法我做错了什么?对于具有项目列表和过滤项目列表的对象,是否有更好的模式?
答案 0 :(得分:12)
您的问题是您需要将计算属性设置为cacheable
。否则,在#each
的每次迭代时重新计算其值。有关cacheable
是否应该是所有计算属性的默认值的讨论。
children_filtered: function(){
return this.get("children").filterProperty("archived",false);
}.property("children").cacheable()
这是一个jsFiddle示例:http://jsfiddle.net/ebryn/9ZKSY/