Backbonejs范围问题,变量以某种方式变得不确定

时间:2013-07-15 11:43:46

标签: javascript html5 backbone.js scope

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

1 个答案:

答案 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: