我有一个包含表格的视图。
var newsIndexView = Backbone.View.extend({
...
});
表中的每一行都是与模型关联的另一个视图。
var newsItemView = Backbone.View.extend({
tagName: "tr",
...
selectRow: function(e){
this.selected = !this.selected;
$(this.el).toggleClass("selected");
if(this.selected){
$(".delete_many").on("click", $.proxy(this.remove, this));
}else{
$(".delete_many").off("click", $.proxy(this.remove, this));
}
},
...
});
用户可以选择行。选择1行或更多行时,将显示删除按钮。当选择按钮(.delete_many)时,我想为每个选定的newsItemView触发删除事件。正如您所看到的那样,当我选择一行时,我正在为它添加一个事件处理程序,并在取消选择它时将其删除。我想知道是否有更好的方法吗?
答案 0 :(得分:2)
您是否无法在管理表的视图上使用delegateEvents来安装点击处理程序一次?它应该触发,即使稍后添加按钮(即使稍后删除按钮也会保持不变)。
var newsIndexView = Backbone.View.extend({
events: {
"click .deleteMany" : "deleteMany"
},
...
然后deleteMany函数将确定选择哪些行并在循环中删除它们。由于按钮属于整个表格(而不属于单个行),因此这似乎更自然。它还可以很容易地拥有一个“你确定”的确认对话框(你想只弹出一次而不是每一行),并使用服务器后端的批量删除功能(每行一个请求而不是一个)。