我有一个使用backbone.js编写的简单音乐应用程序。我在我的一个模型中遇到了以下代码的问题:
MyApp.Models.Program = Backbone.Model.extend({
toPlaylist: function(options, callback) {
console.log("Converting program to playlist");
var self = this;
console.log(self.get('name'));
this.stationHasLicense(function (licensedStation) {
console.log(self.get('name')); // Uncaught TypeError: Cannot call method 'get' of undefined
// bunch of other logic
});
},
});
第一个self.get工作正常。但是,在stationHasLicense回调中的第二个self.get会抛出错误。我在我的应用程序的其他区域使用var self =这来保持范围,但我不确定为什么这个实例失败。
答案 0 :(得分:2)
在执行func时,尝试使用underscore中的绑定绑定此上下文。
MyApp.Models.Program = Backbone.Model.extend({
toPlaylist: function(options, callback) {
console.log("Converting program to playlist");
var self = this;
console.log(self.get('name'));
this.stationHasLicense(_.bind(function (licensedStation) {
console.log(this.get('name'));
// bunch of other logic
}, this));
},
});
可以找到关于那个主题的更多讨论= this or self = this: