Sappiamo tutti fare qualcosa di simile è male:Delega di eventi a sub-viste in Backbone.js
<ul>
<li>Item</li>
<li>Item</li>
... 500 more list items
</ul>
e poi ...
$("ul li").bind("click", function() { ... });
Ho cercato attraverso un sacco di esempi/guide di Backbone e il seguente sembra essere un approccio standard per il rendering di un elenco con elementi, basato su una raccolta di modelli.
var ListView = Backbone.View.extend() {
tagName: 'ul',
render: function() {
this.collection.each(function(item) {
var view = new ListItemView({model: item});
$(this.el).append(view.render().el);
});
return this;
}
});
Una vista elemento della lista:
var ListItemView = Backbone.View.extend() {
tagName: 'li',
events: {
'click' : 'log'
}
log : function() {
console.log(this.model.get("title"));
}
render: function() {
$(this.el).html(this.template(this.model.toJSON()));
return this;
}
});
Se non mi sbaglio, istanziare la listView con una collezione di 500 modelli, mi dà 500 eventi click, uno per ogni riga. Questo è male vero?
So Backbone ha costruito in delegazione evento per gli eventi namespace:
events : {
'click li' : 'log'
}
Suppongo che potrei mettere questo nel mio ListView, e sarebbe creare un solo evento click per l'intera lista, ma poi ho wouldn essere in grado di accedere ai dati del modello corrispondenti alla voce dell'elenco cliccato.
Quali sono i pattern utilizzati dagli sviluppatori di backbone per risolvere questo tipico problema?
Grazie, questo era il tipo di discussione che stavo cercando. – Daniel