【发布时间】:2016-05-15 20:12:00
【问题描述】:
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 视图。我想在一个表中创建并呈现几行,所以我做到了:
data.forEach(function(rowData){
var row = new RowView({model: course, el: mountPoint});
row.render();
});
如果我创建 2 行,则事件绑定两次(如果单击该行,则绑定 2 个警报消息),3 行 3 次。我通过在父视图中定义事件来避免这个问题,但是如果我真的需要在每一行附加事件处理程序,我该如何避免双重事件投标问题?
【问题讨论】:
-
this answer 中有一些父/子视图的策略。但也不要错过更远的pub/sub answer。
-
这不应该发生。你能创建一个minimal reproducible example..吗?
-
tagName和className在您的RowView中的存在表明RowView创建了自己的el。但在这种情况下,一个简单的row.render()不会在页面上得到任何东西。此外,双重事件表明您将多个视图绑定到同一个el。这些事情表明这不是你真正的forEach循环。我错过了什么? -
@muistooshort 我使用“new RowView({model: course, el: mountPoint});”创建视图,因此在渲染时,行将在页面上呈现自身。我刚刚更新了我的问题以解决您的问题。谢谢!
-
@TJ:只是旧的“我将一个
el用于多个视图”问题再次出现,这解释了 Backbone 中 90% 的“一个事件被多次触发”错误。