2016-02-05 41 views
0
var RowView = Backbone.View.extend({ 
    tagName: 'li', 
    className: 'course-row', 
    events: { 
     "click .table-row": "rowClick" // problem here! 
    }, 
    initialize: function() {}, 
    template: _.template(tpl), 
    render: function() { 

     var rowStr = this.template({course: this.model}); 
     $(this.el).append(rowStr); 
    }, 
    rowClick: function (e) { 
     alert(e); 
    } 
}); 

上面的代碼定義了一個Backbone Row視圖。我想創建並在表中呈現幾個幾行,所以我所做的:如何避免Backbonejs視圖中的雙重事件綁定?

data.forEach(function(rowData){ 
    var row = new RowView({model: course, el: mountPoint}); 
    row.render(); 
}); 

如果我創建2行,該事件被綁定兩次(2警報味精如果我點擊行) 3行3次。我通過在父視圖中定義事件來避免了這個問題,但是如果我真的需要在每一行附加事件處理函數,我該如何避免雙重事件標記問題?

+1

在[此答案](http://stackoverflow.com/a/9502515/3585500)中有父/子視圖的一些策略。但也不要錯過[pub/sub answer](http://stackoverflow.com/a/9415369/3585500)。 – ourmandave

+0

這不應該發生。你能創建一個[mcve] ..嗎? –

+0

你的'RowView'中'tagName'和'className'的存在表明'RowView'創建了它自己的'el'。但是在這種情況下,一個簡單的'row.render()'不會在頁面上獲得任何東西。此外,雙重事件表明您將多個視圖綁定到相同的「el」。這些事情表明,這不是你真正的'forEach'循環。我錯過了什麼? –

回答