Todos sabemos hacer algo como esto es malo:Delegación de eventos a los sub-vistas en Backbone.js
<ul>
<li>Item</li>
<li>Item</li>
... 500 more list items
</ul>
y luego ...
$("ul li").bind("click", function() { ... });
que he estado buscando por mucho de ejemplos/guías de Backbone y el siguiente parece ser un enfoque estándar para representar una lista con elementos, basados en una colección de modelos.
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 de lista de elementos:
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;
}
});
Si no me equivoco, una instancia de la vista de lista con una colección de 500 modelos, me da 500 eventos de clic, uno para cada fila. Esto está mal ¿no?
Sé Backbone ha construido en delegación de eventos para eventos de espacios de nombres:
events : {
'click li' : 'log'
}
supongo que podría poner esto en mi ListView, y sólo crearía un evento de clic de toda la lista, pero luego me wouldn no se puede acceder a los datos del modelo correspondiente al elemento de la lista cliqueada.
¿Qué patrones usan los desarrolladores de backbone para resolver este problema típico?
Gracias, ese fue el tipo de discusión que estaba buscando. – Daniel