2

次のクラスを作成します。

APP.core.View = function () {
    var self = this;

    $.ajax ( { url: 'test.html' } ).done ( self.build );

    return self;
};


APP.core.View.prototype.build = function ( source ) {
    var self = this;

    // this refers to the AJAX callback.

    return self;
};

buildメソッドでわかるように、this(APP.core.View に属するもの) への参照が失われています。どうすれば元に戻せますか? this次のように AJAX コールバックでref を渡すことができることはわかっています。

$.ajax ( { url: 'test.html' } ).done ( function ( source ) {
    self.build ( source, self );
} );

しかし、メソッドがそのオブジェクトへの参照を失うことは決してないように感じるので、私はそれがあまり好きではありません。

アイデア/提案はありますか?:)

4

2 に答える 2

2

$.proxy()を使用して、クロスプラットフォーム ソリューションを作成できます

APP.core.View = function () {
    $.ajax({
        url: 'test.html'
    }).done($.proxy(this.build, this));
    return this;
};

最新のブラウザーでは、.bind()を使用できます

APP.core.View = function () {
    $.ajax({
        url: 'test.html'
    }).done(this.build.bind(this));
    return this;
};
于 2013-10-30T13:21:01.187 に答える