1

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

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

我很高兴连接到 observables 并且这部分工作正常,我的问题是如何以及在哪里触发 ajax 调用。

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

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

我觉得我需要一些可以在没有任何视觉元素的情况下监听可观察并触发 ajax 调用的东西。

任何帮助将不胜感激。

4

1 回答 1

4

触发响应视图模型更改应该发生的事情通常通过淘汰订阅进行。

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");
        });           
    });
}
于 2013-10-09T09:42:24.487 回答