Warum nicht Rückgrat Blick Erkennen-Modell Verpasst?
Habe ich Folgendes Backbone.js Modell und collection:
//Model
lr.Event = Backbone.Model.extend({});
//Collection
lr.Events = Backbone.Collection.extend({
model: lr.Event,
initialize: function(models, options) {
this.date = options.date;
},
url: function() {
return '/events' + '?date=' + this.date.toString('yyyy-MM-dd');
}
});
Die verwendet werden, mit einer Ansicht und seine sub-view:
//View
lr.MapView = Backbone.View.extend({
el: $('#wrapper'),
initialize: function() {
this.date = this.options.date;
_.bindAll(this, "render", "addAllEvents", "addOneEvent", "showNextDay", "collectData");
this.collectData();
},
events: {
"click #next": "showNextDay",
},
collectData: function() {
var that = this;
if (this.collection) this.collection.reset();
this.collection = new lr.Events([], { date : this.date });
this.collection.fetch({
success: function(resp) {
that.render();
that.addAllEvents();
}
});
},
showNextDay: function() {
this.date = this.date.add(1).days();
this.collectData();
},
addAllEvents: function() {
this.collection.each(this.addOneEvent);
},
addOneEvent: function(e) {
var ev = new lr.EventView({
model: e,
parentView: this
});
},
...
});
//Sub-view
lr.EventView = Backbone.View.extend({
initialize: function() {
var that = this;
this.model.bind('change', function() {
console.log('foo');
that.remove();
});
}
...
});
Ich versuche zu binden, sub-Blick auf änderungen an den zugeordneten Modell. Also ich würde erwarten, dass, wenn ich rufe this.collection.reset()
, console.log('foo')
aufgerufen werden würde. Ist es aber nicht. Ich habe console.log
ed die Sammlung vor, und ich, nachdem ich es zurückgesetzt, und es ist definitiv von "etwas für nichts", also ich nehme an, ich bin irgendwie Durcheinander die Bindung der sub-Ansicht auf das Modell.
Jemand den Fehler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufrufen
reset()
mit keine Modelle, leert die Sammlung, aber nicht "ändern" der bestehenden Modelle. Die "ändern" Ereignis tritt ein, wenn ein Attribut des Modells änderungen. Aufrufreset()
löst die "reset" Veranstaltung auf die Sammlung selbst (auch ausgelöst, wenn Sie Holen Sie sich eine Sammlung); wenn diese ausgelöst wird, sollten Sie auch zurücksetzen Ihres UI, das erstellen und Rendern aller sub-Elemente anzeigen(in your case, it looks like you would call render and addAllEvents when you get the reset event)
.Nun, wenn ein Attribut von einem Ereignis-Modell nicht ändern, Sie wird Treffer für Ihre änderung hf:
Aber ich bezweifle wirklich, das Sie entfernen möchten die Event-Ansicht, wenn sich das Modell ändert. Mehr wahrscheinlich, Sie wollen re-Rendern, oder update ein Teil davon mithilfe von JQuery.
collection.reset()
(backbone.js
v0.91, Zeile 609) nur feuert einereset
Ereignis nach sich lautlos entfernen und Optional repopulating die Sammlung.collection.remove( model(s) );
(Linie 548) löst eineremove
Ereignis auf jedem Modell, so dass Sie verwenden könntecollection.remove( collection.models );
zum auslösen derremove
Ereignis für jedes Modell.collection.reset()
ohne übergabe von Modellen, die als Argumente leeren die gesamte Kollektion". Wenn die gesamte Sammlung leer ist, bedeutet das nicht, dass alle Modelle gelöscht werden, und damit verändert? documentcloud.github.com/backbone/#Collection-reset