2012-10-29 12 views
6

Attualmente sto osservando alcuni array Ember in questo modo:Ember.JS: Osservando @each, ma proprio l'iterazione di nuovi elementi modificati/

observe_array: function() { 
    this.get("my_array").forEach(function(e,i) { 
     // do something 
    }); 
}.observes("[email protected]"); 

maggior parte delle volte, se my_array viene aggiornato, più elementi vengono aggiunti al una volta. Tuttavia, l'osservatore si attiva uno ad uno man mano che ogni elemento viene aggiunto, il che diventa estremamente inefficiente. C'è comunque modo di farlo in modo più efficiente? Essenzialmente, devo essere in grado di avere un array mutato basato su "my_array"

Per riferimento, le dimensioni realistiche di my_array saranno tra 600-1200 elementi. Il blocco "fa qualcosa" implica alcune operazioni che richiedono più tempo, creando oggetti Date da stringhe e convertendo ogni elemento in rappresentazione json.

Invece di fare un osservatore Ho provato anche una proprietà con il cacheable() Metodo/bandiera, ma che non ha Seam per accelerare le cose molto ....

+0

sai quando la matrice è aggiornata? –

+0

@ sly7_7 Ho paura di non capire bene cosa stai chiedendo, o almeno di quale tipo di risposta stai cercando. L'array è in realtà un array di record Ember-Data e rappresenta tutti gli elementi caricati da un determinato modello. –

+0

Mi dai una buona risposta qui, anche se la mia domanda era una schifezza ^^. Prova ad osservare my_array.isLoaded e vedi se è meglio :) –

risposta

1

Supponendo (tramite i commenti) che il vostro array è un oggetto popolato di ember, dovresti provare ad osservare la proprietà array.isUpdating. Ho avuto successo con questo.

L'unico inconveniente è che è impostato solo quando si utilizza .findAll()! (quindi Model.find())

+0

Bene ecco cosa ho fatto: ho un filtro "filteredData" che essenzialmente è un file store.filter sul mio modello. In precedenza ho provato ad osservare isLoading, isUpdating, ecc. Su questo ... tuttavia è stato attivato ogni volta che un elemento è stato aggiunto. Separatamente stavo interrogando per gli oggetti usando store.findQuery. quello che ho finito è stato semplicemente osservare isLoading su store.findQuery, che si attiva solo una volta - dopo che carica tutti gli elementi. –

Problemi correlati