Em meu aplicativo da web, tenho uma lista de usuários em uma tabela à esquerda e um painel de detalhes do usuário à direita. Quando o administrador clica em um usuário na tabela, seus detalhes devem ser exibidos à direita.
Eu tenho um UserListView e UserRowView à esquerda e um UserDetailView à direita. As coisas funcionam, mas tenho um comportamento estranho. Se eu clicar em alguns usuários à esquerda e, em seguida, clicar em excluir em um deles, obtenho caixas de confirmação de javascript sucessivas para todos os usuários que foram exibidos.
Parece que as associações de eventos de todas as visualizações exibidas anteriormente não foram removidas, o que parece ser normal. Não devo fazer um novo UserDetailView todas as vezes no UserRowView? Devo manter uma visualização e alterar seu modelo de referência? Devo controlar a visualização atual e removê-la antes de criar uma nova? Estou meio perdido e qualquer ideia será bem-vinda. Obrigado !
Aqui está o código da visão esquerda (exibição de linha, evento de clique, criação de visão direita)
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()
}
})
E o código para a visualização correta (botão excluir)
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 view
no roteador?