2011-04-12 23 views
0

我正在嘗試在我的webapp中使用backbone.js。我有一個視圖,它使用JQuery可拖動插件來製作div可拖動:backbone.js + jQuery:'this'引用無法在JQuery-Event-Handler中訪問

var ExampleView = Backbone.View.extend({ 
    events: { 
    //... 
    }, 

    initialize: function() { 
    _.bindAll(this, "render"); 

    this.model.bind('change', this.render); 
    }, 

    render: function() { 
     // icanhaz 
     this.el = ich.kinectdevtmpl(); 

     $(this.el).draggable({ 
     drag: function() { 
       alert(this.model); 

     } 
     });   

    return this; 
    }  

});

但在拖動事件處理程序中,我無法訪問'this.model',因爲'this'不再引用該視圖。那麼,如何在JQuery事件處理程序中訪問我的視圖?

回答

3

這已經改變,不再是你想要的。 你可以將它分配給一個變量並使用它。

var that = this; 
$(this.el).draggable({ 
    drag: function() { 
      alert(that.model); 

    } 
});
+3

另一種方法是綁定的功能視圖:'阻力:_.bind(這一點,函數(){警報(this.model)})' – Julien 2011-04-13 13:32:14

+0

這是一個更好的做法,在我的觀點因爲它顯式地綁定了該函數。使用'that'引用對我來說總是看起來像一個黑客。 – poezn 2011-07-28 19:39:03

+0

你應該使用這個。$ el而不是$(this.el)來獲得更好的性能。 ;) – taseenb 2013-06-20 13:26:57