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

Mar*_*hes 8 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:[]}) );
    },
});
Run Code Online (Sandbox Code Playgroud)

注意children_filtered计算属性.

如果我在视图中使用children_filtered ...

{{#each content.children_filtered }}
  hi
{{/each}}
Run Code Online (Sandbox Code Playgroud)

我的应用程序挂起cpu @ 100%

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

ebr*_*ryn 12

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

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

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

  • 关于使可缓存成为默认值的Github讨论在这里:https://github.com/emberjs/ember.js/issues/38 (4认同)