【问题标题】:knockout multiple ajax calls淘汰多个ajax调用
【发布时间】:2018-03-22 08:07:16
【问题描述】:

以下代码执行多个 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 调用?

【问题讨论】:

    标签: jquery ajax knockout.js knockout-3.0


    【解决方案1】:

    不要单独订阅每个 observable,而是考虑使用计算的 observable,并且仅在所有参数都符合要求时才进行 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 });
    }
    

    计算的 observable 将在您的视图模型被实例化时进行评估,然后在起点或目的地发生变化时进行评估。

    deferred 扩展仅确保如果您出于某种原因同时更新起点和终点(例如在另一个函数中),则计算出的 observable 只会被评估一次。

    【讨论】:

      猜你喜欢
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 2012-12-17
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多