【问题标题】:Backbonejs scope issue, variable becoming undefined somehowBackbonejs 范围问题,变量以某种方式变得未定义
【发布时间】:2013-07-15 11:43:45
【问题描述】:

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

【问题讨论】:

    标签: javascript html backbone.js scope


    【解决方案1】:

    在执行 func 时尝试使用来自 underscore 的绑定来绑定 this 上下文。

    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 主题的更多讨论:

    【讨论】:

    • 感谢您的回答和链接。无论出于何种原因,如果我在上面的示例中使用除“self”之外的任何内容,它都会起作用。不知道为什么......这真的是零意义。
    • 您可能会踩到“window.self”对象。添加了对self、window和window.self的引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 2019-04-30
    • 2014-05-28
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多