在 Knockout.js 中连接 AJAX 调用

Wiring an AJAX call in Knockout.js

本文关键字:AJAX 调用 连接 Knockout js      更新时间:2023-09-26

抱歉,如果之前有人问过这个问题,我已经搜索过,但我发现很难以搜索友好的方式表达我的问题。而且我无法从淘汰赛文档中弄清楚,但这似乎是一个基本问题。

我有 3 个选择列表和一个挖空视图模型。在第一个列表中选择一个值将更新视图模型中的可观察量。然后,我需要发布一个 ajax 帖子,将该值发送到服务器并检索我将其放入视图模型中的可观察数组中的值列表,该列表将依次更新其他 2 个列表。

我很高兴连接到可观察量,并且该部分工作正常,我的问题是如何以及在何处触发 ajax 调用。

如果我在第一个选择的更改事件上触发它,它似乎会导致竞争条件,这意味着它有时会在视图模型更新之前被调用。 我可以在不使用可观察对象的情况下触发它,但这似乎不是很淘汰。

如果我使用自定义绑定来检索值,它将导致 ajax 调用进行两次,并且我无法将检索放在函数中,因为它需要异步运行(并且会被调用两次(。

我觉得我需要一些东西来监听可观察量并触发 ajax 调用,而无需任何视觉元素。

任何帮助将不胜感激。

触发应该响应视图模型更改的事情通常通过淘汰赛中的订阅起作用。

function ViewModel() {
    var self = this;
    self.someValue = ko.observable();
    self.otherValue = ko.observable();
    self.someValue.subscribe(function (newValue) {
        // do something with newValue, like an Ajax request.
        // assuming jQuery
        $.get("your/url", {val: newValue})
        .done(function (data) {
            self.otherValue(data);
        })
        .fail(function () {
            alert("could not retrieve value from server");
        });           
    });
}