我需要将点击事件绑定(bind)到一定数量的特殊div,应该绑定(bind)哪些div只有在运行时才知道 所以我想简单地为所有这些特殊的div设置一个类并将它们绑定(bind)在“事件”中,但是然后单击这些div之一将触发所有div触发 然后我尝试在事件中使用变量,但是这些变量只有在运行时才知道,所以事实证明它们在绑定(bind)事件时是未定义的 现在我使用 jQuery 在运行时绑定(bind) Backbone 内的事件,但是每当我初始化 View 时,事件就会立即触发
var RoomNumber = Backbone.View.extend({
el: $('#roomColumn' + this.roomNumber),
initialize: function () {
_.bindAll(this, 'render');
this.user = this.options.user;
this.roomNumber = this.options.roomNumber;
this.render();
//$('#roomNumber'+this.roomNumber).on('click', this.enterBooking());
},
render: function () {
$(this.el).append("<div class = 'roomNumber' id = 'roomNumber" + this.roomNumber + "'>" + this.roomNumber + "</div>");
},
enterBooking: function () {
var slideForm = new SlideForm({
user: this.user,
roomNumber: this.roomNumber,
state: 'book',
singleSchedule: new Schedule()
});
}
});
有人能解释一下为什么会发生这些吗?如何将事件绑定(bind)到动态生成的 div?
(我知道我可能不应该使用这样的主干 View ..但它是要求的一部分)
最佳答案
您的代码有两个问题:
回答您的观点,绑定(bind)时会触发事件,因为您在绑定(bind)时调用事件处理程序。
$('#roomNumber'+this.roomNumber).on('click', this.enterBooking());
应该是
$('#roomNumber'+this.roomNumber).on('click', this.enterBooking);
注意函数调用大括号。你设置el的方式不对
el: $('#roomColumn' + this.roomNumber),
在主干中, View 的el
属性在之前设置调用initialize
方法。这意味着主干将尝试查找非预期的元素$('#roomColumnundefined')
。相反,您可以将el
元素作为选项传递给 Viewvar roomNumber = 3; var view = new RoomNumber({ roomNumber:roomNumber, el:$('#roomColumn' + roomNumber) });
关于backbone.js - 绑定(bind)时触发的 Backbone 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11730738/