Pregunta

Tengo algo como esto:

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:[]}) );
    },
});

Tenga en cuenta la propiedad calculada children_filtered.

Si uso children_filtered en una vista ...

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

Mi aplicación se cuelga con CPU @ 100%

¿Alguna idea de lo que estoy haciendo mal? ¿Hay un mejor patrón a seguir para un objeto que tenga una lista de elementos más una lista de elementos filtrados?

¿Fue útil?

Solución

Su problema es que necesita que la propiedad calculada se establezca como cacheable. De lo contrario, su valor se recomputa en cada iteración del #each. Ha habido una discusión sobre si cacheable debe ser el valor predeterminado para todas las propiedades calculadas.

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

Aquí hay un ejemplo de jsfiddle: http://jsfiddle.net/ebryn/9zksy/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top