2011-11-15 75 views
0

我有一个包含表格的视图。Backbone.js子视图中的触发事件

var newsIndexView = Backbone.View.extend({ 
    ... 
}); 

表中的每一行都是与模型关联的另一个视图。

​​

用户可以选择行。当选择一行或多行时,会出现一个删除按钮。当选择按钮(.delete_many)时,我想触发每个选定newsItemView的删除事件。正如你所看到的,当一行被选中时,我为它添加一个事件处理程序,并在未选中时删除它。我想知道是否有更好的方法来做到这一点?

回答

2

难道你不能在管理表安装一次点击处理程序的视图上使用delegateEvents?即使稍后添加按钮,它也应该会触发(即使稍后将按钮移除,也会留下按钮)。

var newsIndexView = Backbone.View.extend({ 
events: { 
    "click .deleteMany" : "deleteMany" 
}, 
... 

deleteMany函数然后会找出哪些行被选中并在循环中删除它们。由于按钮属于整个表格(而不是单独的行),这似乎更自然。它还可以很容易地获得一个“你确定”的确认对话框(你只想弹出一次而不是每一行),并使用服务器后端的批量删除功能(每个行一个请求而不是一个) )。

+0

如果我从indexView做到这一点,我想我必须将每个模型的ID存储在DOM中。我认为你的解决方案是有道理的,但是可以不在DOM中存储模型ID(例如data-id =“1”)? – LDK

+0

是不是有一组模型对应于视图和DOM TR的1对1(以相同顺序)?如果没有,是的,将模型的id附加到DOM。 – Thilo