¿Cómo hago una propiedad calculada y filtrada?
-
28-10-2019 - |
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?
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