2017-10-10 72 views
0

以下代碼執行多個阿賈克斯電話。實際上我只想要一個電話。淘汰賽多個阿賈克斯電話

 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調用(見例如:避免多次阿賈克斯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 }); 
} 

的計算觀察到,當您的視圖模型實例將評估,然後每當始發地或目的地的變化。

推遲擴展只確保如果你,由於某種原因,同時更新來源和目的地(例如在另一個函數),計算的觀察值將只被評估一次。