Ich werde das folgende vorschlagen, weil ich keinen Zusammenhang habe, wie Sie Ihre Anwendung entworfen haben (Backbone.js ist großartig, weil es Ihnen eine Menge Seil gibt, aber wie Sie Ihre Anwendung gestalten können ändern Sie, wie Sie Synchronisierungslösungen implementieren müssen). Ich bin mehr als glücklich, anzupassen, zu erweitern, oder diesen Beitrag zu klären, wenn Sie ein wenig mehr über gemeinsam nutzen können, wie Sie Ihre App, Ansicht, Sammlung, und Modellcode architected habe für mich zu verstehen, was Sie zu erreichen versuchen.
In Ihrem Code, würde ich auf die update
Ereignis hören statt des add
Ereignis (seit add
auf jedem neuen Element löst hinzugefügt, um die Sammlung, im Vergleich zu update
die nach löst eine beliebige Anzahl von Elementen hinzugefügt/entfernt wurden aus einer Sammlung). Dann würde ich die on/off Änderung für add
Ereignis entfernen und stattdessen haben Ihrer Meinung nach eher auf Collection.reset Ereignis hören als das Ausschalten und auf Ihre Zuhörer für Ihren Abruf/Sync-Zyklus.
Ich habe diese Art von anzeigen Design-Muster in der Vergangenheit erfolgreich verwendet:
var _ = require('lodash');
var DocumentRow = Backbone.View.extend({
events: {
"click #someEl": "open"
},
clean: function() {
// cleans up event bindings to prevent memory leaks
},
initialize: function(options) {
_.bindAll(this, [
'initialize',
'open',
'render',
'clean'
]);
options = options || {};
this.collection = options.collection ? options.collection : SomeCollection;
this.listenTo(this.collection, "reset", this.render);
},
open: function(item) {
...
},
render: function() {
...
}
});
Bitte legen Sie ein [minimal, vollständig und überprüfbar Beispiel] (http://stackoverflow.com/help/mcve) . –