2017-10-10 11 views
0

次のコードは複数のajax呼び出しを行います。私は実際には1つの呼び出しをしたいです。ノックアウト複数のajaxコール

 var update = function(){ 

     if(self.origin() && self.destination()){ 

      // AJAX CALL HERE 
      $.get(something); 

     } 
    } 


    self.origin.subscribe(function() { 
     update(false); 
    }); 

    self.destination.subscribe(function() { 
     update(false); 
    }); 

    self.origindatetime.subscribe(function() { 
     update(true); 
    }); 

    self.returndatetime.subscribe(function() { 
     update(true); 
    }); 

私はdeferred updatesを試しました。しかし、運がない。

複数のajax呼び出しを避けるにはどうすればよいですか?

答えて

1

代わりに個別に観測可能に加入するのは、観察可能な計算のみ必要に応じて、すべてのパラメータは、AJAX呼び出しを行い使用することを検討してください(例を参照してください。回避複数のAjaxはhttp://knockoutjs.com/documentation/deferred-updates.htmlを要求します)。

次はその例に基づいているに:あなたのビューモデルがインスタンス化して、いつでも発信元や宛先変更されたときに

function ViewModel() { 
    this.origin = ko.observable(); 
    this.destination = ko.observable(); 
    ko.computed(function() { 
     var params = { origin: this.origin(), destination: this.destination() }; 
      if (params.origin && params.destination) { 
       $.get(something); 
      } 
    }, this).extend({ deferred: true }); 
} 

計算し、観察を評価します。

延期拡張のみ計算観察(例えば、別の関数に)もしあれば、何らかの理由で、一度に出発地と目的地の両方を更新することを確実に一度だけ評価されます。