2012-07-28 39 views
0

基本上我想要的是我的HTML表的每一行都有一個Backbone視圖,當我渲染我的表時,我可以很容易地完成這個任務。我爲每個tr實例化一個backbone.view,那將是「el」風景。骨幹錶行視圖,只有一個eventlistener?

但是,這將導致每個tr都有一個eventlistener,這不是非常有效。有沒有辦法完成同樣的事情,即每個行視圖的「el」是tr,但是所有事件都是從table元素委派的,這樣只有一個eventlistener存在?

也許有一個父視圖的表,並以某種方式委託所有事件,或者我真的不知道如何以良好的方式去做這件事,謝謝。

+0

爲什麼要查看每一行? – Andbdrew 2012-07-28 16:11:42

回答

3

正常的方法是使用TableView和多個RowView s。 TableView將與Collection相關聯,並且它將根據需要實例化多個RowViews迭代該集合。

此外,TableView將監聽Collection中的更改,並在Collection更改時創建和刪除RowView實例。

RowView將收聽集合中每個Model的更改。並且監聽到與每個模型關聯的活動DOM元素上的用戶交互。

我沒有看到任何問題。我認爲這是最直觀,可維護,最優雅的結構。

如果你真的認爲是具有TableView中一次它不是一個問題,監聽事件中的所有行更好,試試這個:

var TableView = Backbone.View.extend({ 
    events: { 
    "click tr a.remove", "remove" 
    }, 

    remove: function(event){ 
    console.log("row-id", $(event.target).attr("data-row-id")); 
    } 
}); 

只是要確保每個row可以通過TableView中任何標識這個例子中的特殊屬性如data-row-id ..但是他們你必須去集合,搜索具體的模型和行爲,當直接在RowView中使用這個事件時,你可以直接訪問模型,並且一切工作都更自然。

其實我不認爲你會取得更好的表現,我認爲發作中的jQuery將創建相同數量的事件監聽器。