淘汰多次 ajax 电话
knockout multiple ajax calls
以下代码执行多个 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 调用?
与其单独订阅每个可观察对象,不如考虑使用计算可观察对象,并且仅在所有参数都符合要求时才进行 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 });
}
计算的可观察对象将在您的视图模型被实例化时进行评估,然后在起点或目的地发生变化时进行评估。
deferred 扩展仅确保如果您出于某种原因同时更新起点和终点(例如在另一个函数中),计算的可观察值将仅被评估一次。
以下代码执行多个 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 调用?
与其单独订阅每个可观察对象,不如考虑使用计算可观察对象,并且仅在所有参数都符合要求时才进行 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 });
}
计算的可观察对象将在您的视图模型被实例化时进行评估,然后在起点或目的地发生变化时进行评估。
deferred 扩展仅确保如果您出于某种原因同时更新起点和终点(例如在另一个函数中),计算的可观察值将仅被评估一次。