0

backbone.js を使用して作成されたシンプルな音楽アプリがあります。モデルの 1 つで以下のコードに問題があります。

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 コールバックの 2 番目の self.get はエラーをスローします。var self = this をアプリの他の領域全体で使用してスコープを維持していますが、このインスタンスが失敗する理由がわかりません。

4

1 に答える 1

2

関数を実行するときに、アンダースコアからのバインドを使用してこのコンテキストをバインドしてみてください。

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 に答える