В моем веб-приложении у меня есть список пользователей в таблице слева и панель подробностей пользователя справа. Когда администратор нажимает на пользователя в таблице, его подробная информация должна отображаться справа.
У меня есть UserListView и UserRowView слева, и UserDetailView справа. Все вроде бы работает, но у меня странное поведение. Если я нажимаю на некоторых пользователей слева, а затем нажимаю удалить одного из них, я получаю последовательные поля подтверждения javascript для всех пользователей, которые были отображены.
Похоже, что привязки событий всех ранее отображенных представлений не были удалены, что кажется нормальным. Я не должен каждый раз делать новый UserDetailView на UserRowView? Должен ли я поддерживать представление и изменять его ссылочную модель? Должен ли я отслеживать текущее представление и удалять его перед созданием нового? Я немного запутался и любая идея будет приветствоваться. Спасибо!
Вот код левого представления (отображение строки, событие клика, создание правого представления)
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()
}
})
И код правого представления (кнопка удаления)
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;
}
})