2011-11-15 100 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