2013-01-08 53 views
2

在Backbone.js中工作,我想從模型的方法中設置一個模型屬性。這看起來應該很簡單,但我無法讓它工作。Backbone.js:在模型中設置模型屬性?

目前我擁有的就是這個。我試圖設置「結果」屬性「performSearch」在通話過程中:

var SearchModel = Backbone.Model.extend({ 
    performSearch: function(str) { 
     $.get('/' + str, function(results) { 
     console.log(data); 
     this.set("results", data); 
     }); 
    }, 
}); 

這給了我下面的錯誤:

Uncaught TypeError: Object #<Object> has no method 'set' 

我在做什麼錯?

回答

5

問題是this未綁定到ajax回調中的模型對象。

您可以通過執行修復:

var SearchModel = Backbone.Model.extend({ 
    performSearch: function(str) { 
     //assign to local variable, so that it is accesible in callback's closure 
     var self = this; 
     $.get('/' + str, function(results) { 
      // are you sure it should be data? 
      console.log(data); 
      self.set("results", data); 
     }); 
    }, 
}); 

另一種方式來做到這一點是明確綁定回調函數模型:

var SearchModel = Backbone.Model.extend({ 
    performSearch: function(str) { 
     //assign to local variable, so that it is accesible in callback's closure 
     $.get('/' + str, (function(results) { 
      // are you sure it should be data? 
      console.log(data); 
      this.set("results", data); 
     }).bind(this)); //binding here 
    }, 
}); 
+0

就是這樣,謝謝! (很快會接受) – Richard

+0

在第二個例子中,如果你綁定'this',你能不能省略整個'self'部分嗎? – robmisio

+0

@robmisio是的,抱歉 - 複製麪食錯誤;) – soulcheck