7

Spotlight という「クラス」/関数があります。ajax を介して情報を取得し、Spotlight のプロパティに割り当てようとしています。これが私の Spotlight クラスです。

function Spotlight (mId,mName) {
    this.area = new Array();

    /**
     * Get all area information
     */
    this.getArea = function () {

        $.ajax({
            url: base_url +'spotlight/aGetArea',
            type: 'POST',
            success: function (data) {
                this.area = data;
            }
        });
    }
}

オブジェクトを配列に割り当てましたが、Spotlight 内からアクセスするのは難しいので、'this' を使用してすべてにアクセスしたいと考えています。成功関数はクラスの外にあるようですが、クラス内に作成する方法がわかりません。

Spotlight.area ではなく this.area を使用してクラス プロパティにデータを取得する方法はありますか?

4

3 に答える 3

13

この値は、各関数の呼び出し方法によって異なります。この問題を回避する方法は 3 つあります。

1.これにエイリアスを作成する

var that = this;
this.getArea = function () {
    $.ajax({
        url: base_url +'spotlight/aGetArea',
        type: 'POST',
        success: function (data) {
            that.area = data;
        }
    });
};

2.jQuery.ajax contextオプションの使用

this.getArea = function () {
    $.ajax({
        url: base_url +'spotlight/aGetArea',
        type: 'POST',
        context : this,
        success: function (data) {
            this.area = data;
        }
    });
};

3.バインドされた関数をコールバックとして使用する

this.getAreaSuccess = function (data) {
    this.area = data;
};
this.getArea = function () {
    $.ajax({
        url: base_url +'spotlight/aGetArea',
        type: 'POST',
        success: this.getAreaSuccess.bind(this)
    });
};
于 2013-01-14T18:54:46.750 に答える
4

とにかくうまくSpotlight.areaいかないでしょう。外側を保持するだけですthis:

this.area = [];
var theSpotlight = this;

そしてコールバックで:

  theSpotlight.area = data;
于 2013-01-14T18:51:46.970 に答える
1

成功関数内の場合、これは成功関数のスコープに対応します。

function Spotlight (mId,mName) {
    this.area = [];
    var scope = this;

    /**
     * Get all area information
     */
    this.getArea = function () {

        $.ajax({
            url: base_url +'spotlight/aGetArea',
            type: 'POST',
            success: function (data) {
                scope.area = data;
            }
        });
    }
}
于 2013-01-14T18:55:43.557 に答える