Nous savons tous faire quelque chose comme cela est mauvais:événements Déléguer à des sous-vues Backbone.js
<ul>
<li>Item</li>
<li>Item</li>
... 500 more list items
</ul>
puis ...
$("ul li").bind("click", function() { ... });
J'ai cherché par beaucoup de Backbone exemples/guides et ce qui suit semble être une approche standard pour le rendu d'une liste avec des éléments, à partir d'une collection de modèles.
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;
}
});
Une vue d'élément de liste:
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 je ne me trompe pas, l'instanciation listView avec une collection de 500 modèles, me donne 500 événements de clic, un pour chaque ligne. C'est mauvais, non?
Je sais que Backbone a construit en délégation pour les événements namespaced:
events : {
'click li' : 'log'
}
Je suppose que je pourrais mettre dans mon ListView, et il ne ferait que créer un événement de clic pour toute la liste, mais je ne serais Ne pas pouvoir accéder aux données du modèle correspondant à l'élément de la liste cliquée.
Quels sont les modèles utilisés par les développeurs de backbone pour résoudre ce problème type?
Merci, c'était le genre de discussion que je cherchais. – Daniel