Ho una collezione App.listingList
dove i successivi fetch()
vengono chiamati con add:true
.Backbone.js: Dopo aver eseguito Fetch(), visualizza solo i nuovi modelli
App.listingList.fetch({
data: {some:data},
processData: true,
add: true
});
Problema: Come possono i modelli appena aggiunti avere il loro parere reso, senza re-rendering il punto di vista dei modelli esistenti. Ciò significa che non posso fare:
this.collection.each(function(listing, index) {
new ListingMarkerView({ model:listing }).render();
}, this);
Tentativo # 1
rendering della vista sulla manifestazione della collezione add
, non riesco a trovare un modo per accedere ai nuovi modelli di rendere
ListingListView = Backbone.View.extend({
initialize: function() {
this.collection.bind('add', this.renderNew, this);
},
render: function() {
console.log('render ListingListView');
this.collection.each(function(listing, index) {
new ListingMarkerView({ model:listing }).render();
}, this);
return this;
},
renderNew: function() {
// How do I grab the new models?
new ListingMarkerView({ model:listing }).render(); // wont work
return this;
}
});
Tentativo n. 2
Ho provato ad avere un secondo Col per fare il successivo fetch
e confrontare i modelli di entrambe le raccolte usando lo underscore.js _.without()
, ma l'array restituito contiene ancora gli elementi trovati nel 2 ° array passato come parametro. L'utilizzo di _difference()
ha inoltre restituito la stessa matrice passata come prima matrice.
App.listingListNew.fetch({
data: {some:data},
processData: true,
success: function() {
console.log(App.listingListNew.models);
console.log(App.listingList.models);
console.log(_.without(App.listingListNew.models, App.listingList.models));
console.log(_.difference(App.listingListNew.models, App.listingList.models));
}
});
console.log
uscita
Da passai 2 allineamenti identici in _.difference()
e _.without()
, l'uscita dovrebbe essere []
. Ma non lo è:/Forse perché cid
è diverso, quindi ognuno di essi viene trattato come unico?