2012-07-30 196 views
2

我需要将点击事件绑定到一定数量的特殊div,这些div应该绑定在运行时才知道 所以我想为所有这些特殊div设置一个类,并将它们绑定到“事件“,但随后点击这些div中的一个会触发所有div触发 然后我尝试在事件中使用变量,但这些变量只在运行时才知道,所以事实证明它们在绑定事件时是未定义的 现在我是使用jQuery在运行时内骨干事件绑定,但每当我初始化认为,事件触发马上绑定时触发的骨干事件

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() 
     }); 
    } 
}); 

会有人きndly解释为什么会发生这种情况?我怎样才能将事件绑定到动态生成的div?

(我知道我可能不应该使用一个骨干视图像this..but它的需求的一部分)

+0

你是如何生成的看法?你可以包含调用'new RoomNumber()'的代码吗? – Benjen 2012-07-31 00:51:35

回答

3

您的代码有两个问题:

  1. 回答您点,绑定时会触发事件,因为您在绑定时调用事件处理程序。

    $('#roomNumber'+this.roomNumber).on('click', this.enterBooking());
    应该
    $('#roomNumber'+this.roomNumber).on('click', this.enterBooking);
    注意函数调用括号。

  2. 已设置的EL的方式是错误的

    el: $('#roomColumn' + this.roomNumber),
    在骨干网中,initialize方法被调用之前认为的el属性,都会设置。这将意味着骨干网将尝试寻找不是预期的元素$('#roomColumnundefined')。相反,你可以通过el元素作为一个选项,认为

    var roomNumber = 3; 
        var view = new RoomNumber({ 
         roomNumber:roomNumber, 
         el:$('#roomColumn' + roomNumber) 
        }); 
    
+0

这些确实是问题,没有人回答,所以我不得不自己想出来。还是要谢谢你的帮助 – 2012-08-03 03:55:53

0
...... 
//Pseudo code 
render: function() { 
    $(this.el).append("<div class = 'roomNumber' id = 'roomNumber" + this.roomNumber + "'>" + this.roomNumber + "</div>"); 

    //you can dynamic set up events like this: 
    this.events["click #roomNumber"+this.roomNumber] = "enterBooking"; 
    this.delegateEvents(this.events); 

}, 
......