Come faccio a creare una proprietà calcolata e filtrata?
-
28-10-2019 - |
Domanda
Ho qualcosa di simile:
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:[]}) );
},
});
Nota la proprietà calcolata per bambini_filterate.
Se uso Children_filtered in una vista ...
{{#each content.children_filtered }}
hi
{{/each}}
La mia applicazione è appesa alla CPU al 100%
Qualche idea su cosa sto facendo di sbagliato? Esiste un modello migliore da seguire per un oggetto che ha un elenco di elementi più un elenco di elementi filtrati?
Soluzione
Il tuo problema è che hai bisogno che la proprietà calcolata sia impostata come cacheable
. Altrimenti, il suo valore è ricompenso su ogni iterazione del #each
. Si è discusso se cacheable
dovrebbe essere l'impostazione predefinita per tutte le proprietà calcolate.
children_filtered: function(){
return this.get("children").filterProperty("archived",false);
}.property("children").cacheable()
Ecco un esempio JSFiddle: http://jsfiddle.net/ebryn/9zksy/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow