0

成功コールバック関数内から設定しようとしているパラメータに問題があるようです:

var CampModel = CampDataModel.extend({

    initialize : function(){

        this.fetchActiveAndPending();
        console.log(this.get('active'));
    },

    //Counts active and pending campaigns for front page.
    CountActiveAndPending : function(data){
      var active = 0;
      var pending = 0;

      $.each(data.returnValue,function(index,val){
        if (val.ApprovedOnSite){
          active++;
        }
        else
          pending++;       
      });
      this.set('active',active);
      this.set('pending',pending);
    },

    //fetches  data from server using campModel.
    fetchActiveAndPending : function(){
      console.log('fetching!');
      that = this;
     this.fetch({
        success:function(model,response){
          that.CountActiveAndPending(response);        
        }

      });
       }
    });

    return CampModel;
});

this.get('active') の結果は常にデフォルトの数値です。成功コールバック関数内から this.get('active') を使用しようとすると、正しい結果が得られます。コールバック関数内から var を設定し、それを外部から呼び出すことは可能ですか? 初期化関数としましょう。

4

2 に答える 2

1

これはクロージャーの問題ではなく (コールバック関数から変数にアクセスできない、またはそのような奇妙なことを意味します)、実行タイミングの問題です。クライアントがサーバーから応答を受け取ると、コールバックが非同期successで実行されます。応答が到着したことを確認する唯一の方法は、リスナー ( http://backbonejs.org/#Events ) またはコールバック (成功関数として) を使用することです。応答が受信された後にコードの一部が実行されることを確認すると、パラメーターの正しい値が得られます。active

ここであなたがするとき:

console.log(this.get('active'));

リクエストはまだ保留中のため、activeはまだ-1です。したがって、あなたの問題は、コードの非同期側を考慮していないことです。

于 2013-07-01T13:43:08.560 に答える