En mi aplicación web, tengo una lista de usuarios en una tabla a la izquierda y un panel de detalles de usuarios a la derecha. Cuando el administrador hace clic en un usuario en la tabla, sus detalles deben mostrarse a la derecha.
Tengo un UserListView y UserRowView a la izquierda, y un UserDetailView a la derecha. Las cosas funcionan, pero tengo un comportamiento extraño. Si hago clic en algunos usuarios a la izquierda, luego hago clic en eliminar en uno de ellos, obtengo cuadros de confirmación de javascript sucesivos para todos los usuarios que se han mostrado.
Parece que los enlaces de eventos de todas las vistas mostradas anteriormente no se han eliminado, lo que parece ser normal. ¿No debería hacer un nuevo UserDetailView cada vez en UserRowView? ¿Debo mantener una vista y cambiar su modelo de referencia? ¿Debo realizar un seguimiento de la vista actual y eliminarla antes de crear una nueva? Estoy un poco perdido y cualquier idea será bienvenida. Gracias !
Aquí está el código de la vista izquierda (visualización de fila, evento de clic, creación de vista derecha)
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()
}
})
Y el código para la vista derecha (botón eliminar)
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;
}
})
delete viewen el enrutador?