2012-01-15 3 views
8

У меня есть что-то вроде этого:Как создать вычисленное, отфильтрованное свойство?

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 вычисленного свойства.

Если я использую children_filtered в представлении ...

{{#each content.children_filtered }} 
    hi 
{{/each}} 

Мое приложение зависает с центрального процессора при 100%

Любые идеи, что я делаю не так? Есть ли лучший шаблон для объекта, который имеет список элементов, а также список фильтрованных элементов?

ответ

12

Ваша проблема заключается в том, что вам необходимо вычислить свойство, которое должно быть установлено как cacheable. В противном случае его значение пересчитывается на каждую итерацию #each. Обсуждалось, должно ли значение cacheable быть по умолчанию для всех вычисленных свойств.

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

Вот jsFiddle пример: http://jsfiddle.net/ebryn/9ZKSY/

+0

Спасибо! Ты жжешь. –

+4

Обсуждение Github об использовании кеширования по умолчанию: https://github.com/emberjs/ember.js/issues/38 –

+1

И теперь это значение по умолчанию: http://emberjs.com/api/classes/Ember .ComputedProperty.html # method_cacheable –

Смежные вопросы