淘汰多次 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 扩展仅确保如果您出于某种原因同时更新起点和终点(例如在另一个函数中),计算的可观察值将仅被评估一次。