1

ajaxを使用してsetterでClassを使用する際に問題が発生しました。これが条件です。

var MyClass = Class.create();
MyClass.prototype = {
    myAttr:0,
    setMyAttr: function(){
        jQuery.ajax({
            url:'data.php',
            success:function(data) {
                //set myAttr here
            }
        });
    }
}

成功関数内に設定したいのですがmyAttr、どうすればよいですか?ありがとう。:D

4

2 に答える 2

2

あなたは何であるかを言っていませんClass.createが(JavaScript自体には何もありません)、私はそれが質問にとってそれほど重要ではないと思います。

プロトタイプではなく、インスタンスmyAttrに設定したいと思います(ただし、間違っている場合は以下を参照してください)。最も簡単な方法は、コールバックがへの呼び出しのコンテキストですでにクロージャであるという事実を利用することです。そのため、変数をに設定し(コールバックでは異なるため)、次のように使用します。successsetMyAttrthisthissuccess

var MyClass = Class.create();
MyClass.prototype = {
    myAttr:0,
    setMyAttr: function(){
        var self = this;            // <== Set the variable
        jQuery.ajax({
            url:'data.php',
            success:function(data) {
                self.myAttr = data; // <== Use it
            }
        });
    }
};

クロージャーの詳細:クロージャーは複雑ではありません

しかし、私が間違っていて、実際にプロトタイプを更新したい場合は、次のようにします。

var MyClass = Class.create();
MyClass.prototype = {
    myAttr:0,
    setMyAttr: function(){
        jQuery.ajax({
            url:'data.php',
            success:function(data) {
                MyClass.prototype.myAttr = data;
            }
        });
    }
};

(プロトタイプへの割り当ての最後にあることに注意してください;。自動セミコロン挿入であるホラーに依存しないことを強くお勧めします。)

于 2012-12-05T12:11:27.127 に答える
0

次のように実行できます。

        success:function(data) {
            //set myAttr here
            MyClass.prototype.myAttr = data;
        }
于 2012-12-05T12:12:05.540 に答える