如何进行计算的过滤属性?

时间:2012-01-15 17:43:15

标签: ember.js

我有这样的事情:

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%

任何想法我做错了什么?对于具有项目列表和过滤项目列表的对象,是否有更好的模式?

1 个答案:

答案 0 :(得分:12)

您的问题是您需要将计算属性设置为cacheable。否则,在#each的每次迭代时重新计算其值。有关cacheable是否应该是所有计算属性的默认值的讨论。

children_filtered: function(){        
  return this.get("children").filterProperty("archived",false);
}.property("children").cacheable()

这是一个jsFiddle示例:http://jsfiddle.net/ebryn/9ZKSY/