Dans mon application web, j'ai une liste d'utilisateurs dans un tableau sur la gauche, et un volet de détails sur les utilisateurs sur la droite. Lorsque l'administrateur clique sur un utilisateur dans le tableau, ses détails doivent s'afficher sur la droite.
J'ai un UserListView et un UserRowView sur la gauche, et un UserDetailView sur la droite. Les choses fonctionnent à peu près, mais j'ai un comportement bizarre. Si je clique sur certains utilisateurs à gauche, puis sur supprimer l'un d'entre eux, j'obtiens des boîtes de confirmation successives en javascript pour tous les utilisateurs qui ont été affichés.
Il semble que les liaisons d'événements de toutes les vues précédemment affichées n'ont pas été supprimées, ce qui semble être normal. Je ne devrais pas créer un nouveau UserDetailView à chaque fois sur UserRowView ? Dois-je maintenir une vue et changer son modèle de référence ? Devrais-je garder la trace de la vue actuelle et la supprimer avant d'en créer une nouvelle ? Je suis un peu perdu et toute idée sera la bienvenue. Merci !
Voici le code de la vue de gauche (affichage des lignes, événement de clic, création de la vue de droite)
window.UserRowView = Backbone.View.extend({
tagName : "tr",
events : {
"click" : "click",
},
render : function() {
$(this.el).html(ich.bbViewUserTr(this.model.toJSON()));
return this;
},
click : function() {
var view = new UserDetailView({model:this.model})
view.render()
}
})
Et le code pour la vue de droite (bouton de suppression)
window.UserDetailView = Backbone.View.extend({
el : $("#bbBoxUserDetail"),
events : {
"click .delete" : "deleteUser"
},
initialize : function() {
this.model.bind('destroy', function(){this.el.hide()}, this);
},
render : function() {
this.el.html(ich.bbViewUserDetail(this.model.toJSON()));
this.el.show();
},
deleteUser : function() {
if (confirm("Really delete user " + this.model.get("login") + "?"))
this.model.destroy();
return false;
}
})