Backbone.Collection.fetch():
fetch: function(options) {
options = options ? _.clone(options) : {};
if (options.parse === void 0) options.parse = true;
var success = options.success;
options.success = function(collection, resp, options) {
var method = options.update ? 'update' : 'reset';
collection[method](resp, options);
if (success) success(collection, resp, options);
};
return this.sync('read', this, options);
},
Allora che succede qui è, il tuo passato in funzione è assegnata a var succees
.
collection[method](resp, options);
Viene chiamato e nel tuo caso il metodo è 'reset'
.
collection.reset
deve passare e aggiungere tutti i modelli, attivare tutti gli eventi in corso. Non so esattamente cosa sta succedendo ma passa attraverso lo collection.reset
, lo collection.add
, lo model.add
, ecc. Non ho seguito tutto.
Non sono sicuro di quale sia il problema, mi dispiace. Spero di poter almeno aiutarti a provare alcune cose, quindi forse possiamo capirlo. La linea if (success) success(collection, resp, options)
è la chiamata alla funzione di successo. Che cosa si potrebbe provare a fare è avere il callback successo accettare gli argomenti passati indietro e fare un po 'consolante di quelli fuori:
success: function(collection, resp, options) {
console.log(collection); // this might do the trick.
// if not, you could try the following
collection.on("reset", function(c, options) {
console.log(c); // see what that gives ya.
});
}
Un'altra cosa è, non riuscivo a trovare in qualsiasi parte del sorgente o la documentazione in cui collection.fetch prende un'opzione di aggiunta. Se mi manca, per favore fammi sapere che mi piacerebbe dare un'occhiata.
Buona fortuna, fammi sapere cosa trovi. Potrebbe valere la pena seguire anche un debugger.
Cazzo, mi sembra anche che la console mi abbia spesso mostrato la versione più aggiornata degli oggetti di raccolta quando non avrebbe dovuto.
provare consolando le lunghezze delle collezioni invece o qualcosa del genere:
var len = $this.Messages.length;
console.log(len);
//...
// or in the success callback
var len = collection.length;
console.log(len);
Hai verificato che i dati vengano effettivamente restituiti nella chiamata get? – kinakuta
Stai solo cercando i nuovi modelli aggiunti in '$ this.Messages' all'interno del callback' success'? In tal caso, sei sicuro che, quando viene chiamato 'successo', la raccolta avrebbe già analizzato la risposta e aggiunta alla raccolta? –