javascript - Backbonejs 范围问题,变量以某种方式变得未定义

标签 javascript html 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 = this 来保持范围,但我不确定为什么这个实例失败。

最佳答案

尝试使用 underscore 中的绑定(bind)执行函数时绑定(bind)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 主题的更多讨论:

关于javascript - Backbonejs 范围问题,变量以某种方式变得未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17653466/

相关文章:

javascript - 使用 Node.js 进行管道传输时如何跟踪写入进度?

html - 将可滚动列表限制在视口(viewport)高度内

javascript - 渲染模板时的 Backbone JS 触发事件

javascript - Backbone.js - 搜索字段 : use only one Item

javascript - 如何重用对象文字

javascript - node.js 如何处理身份验证/用户系统?

javascript - 异步等待不等待对象填充 axios.get

javascript - 如何使用谷歌图表在下拉选择中获取选定的图表类型

javascript - Android中如何调用JavaScript

backbone.js - 您如何组织您的Backbone文件?