Sto lavorando con l'applicazione di esempio Todos bundled with the latest version of Backbone (0.9.2) durante l'apprendimento di Backbone.js. La mia domanda è: perché l'app è stata progettata per attivare l'evento di rendering due volte quando si aggiunge un modello alla raccolta Todos?Backbone.js esegue il rendering rendering due volte sulla raccolta aggiungi
Se ho posto questa linea all'interno della funzione di rendering del TodoView: "Rendering"
// Re-render the titles of the todo item.
render: function() {
console.log("Rendering!");
this.$el.html(this.template(this.model.toJSON()));
Poi appare due volte nella console. Capisco che questo è perché la vista si lega evento di modifica del modello di della vista di rendering:
initialize: function() {
this.model.bind('change', this.render, this);
E il rendering viene chiamato in addOne, che è legato alla Todos' evento aggiuntivo:
addOne: function(todo) {
var view = new TodoView({model: todo});
this.$("#todo-list").append(view.render().el);
},
Ma è questa pratica standard di progettazione a doppio rendering? Sembra che la vista debba essere resa alla creazione (o all'entrata nel DOM), e poi di nuovo se il modello sottostante cambia. In questo caso, non viene modificato nulla, ma il rendering viene chiamato due volte.
Ancora una volta, sto imparando solo Backbone, quindi potrei avere un malinteso fondamentale che sta portando alla mia confusione.
nice catch! .. puoi anche usare '{silent: true}' per evitare l'attivazione di eventi. – fguillen
Hai ragione, questo è il motivo per cui l'evento di cambiamento è stato sparato. Tuttavia, la modifica del codice nel modo suggerito interrompe l'evento ma interrompe anche la funzionalità (non riesco più a eliminare gli elementi). Ovviamente questo non è molto importante in termini di risposta alla mia domanda, ma nel caso qualcuno in futuro legga questo, volevo farlo notare. – jcady
Elimina elementi _permanently_ cioè. Dopo l'eliminazione, se aggiorno, esistono ancora. – jcady