0

我有一个使用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 = this 来保持范围,但我不确定为什么这个实例会失败。

4

1 回答 1

2

在执行 func 时尝试使用下划线绑定来绑定此上下文。

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

可以找到关于 that=this 或 self=this 主题的更多讨论:

于 2013-07-15T21:59:55.493 回答