I’ve got something like this:
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:[]}) );
},
});
Note the children_filtered computed property.
If I use children_filtered in a view…
{{#each content.children_filtered }}
hi
{{/each}}
My application hangs with cpu @ 100%
Any ideas what I’m doing wrong? Is there a better pattern to follow for an object that has a list of items plus a list of filtered items?
Your problem is that you need the computed property to be set as
cacheable. Otherwise, its value is recomputed upon every iteration of the#each. There has been discussion about whethercacheableshould be the default for all computed properties.Here’s a jsFiddle example: http://jsfiddle.net/ebryn/9ZKSY/