Javascript Knockout.js Computed observable未绑定到observable数组

Javascript Knockout.js Computed observable未绑定到observable数组,javascript,knockout.js,Javascript,Knockout.js,我试图得到计算值,并将这些值推送到可观察数组。返回简单值的Web Api控制器-仅返回没有json包装的纯数字。也许这就是问题所在。请建议我,因为我是新手。 这里有两个ajax调用,因为它们调用的是不同的api控制器 function GrafikViewModel(grafikUri) { var self = this; self.books = ko.observableArray(); self.PaxLeft =

我试图得到计算值,并将这些值推送到可观察数组。返回简单值的Web Api控制器-仅返回没有json包装的纯数字。也许这就是问题所在。请建议我,因为我是新手。 这里有两个ajax调用,因为它们调用的是不同的api控制器

 function GrafikViewModel(grafikUri) {
            var self = this;
            self.books = ko.observableArray();
            self.PaxLeft = ko.computed(function () {
                ko.utils.arrayForEach(self.books(), function (book) {
                    $.getJSON("/api/orders/getpax/" + book.kodg, function (item) {
                        self.books().push(item);
                    });
                }, GrafikViewModel)
            });
            $.getJSON(grafikUri, function (data) {
                self.books(data.$values);
            });
        }

我得做一些猜测,但我相信你想要的是

self.books.push(item);
而不是

self.books().push(item);
请注意此处缺少的
()
。敲除可观察数组“镜像”了该数组的大部分功能。通过使用这些,而不是
数组提供的,knockout可以跟踪包装数组发生的更改


编辑:您可以在下面两页的位置找到所有“镜像”函数的列表(“操纵可观察的阵列”部分)

您想要一个有副作用的计算结果吗?你确定吗?顺便说一句,您已经在这里创建了一个循环依赖项-一个可以更改
书籍
并对
书籍
上的更改做出反应的计算依赖项。我认为你走错了方向,请解释一下你到底想做什么。你所说的副作用是什么意思?关于循环依赖,你是对的。我是否应该将其更改为self.PaxLeft(这是ko.可观察的)?实际上,我的目标是从两个不同的控制器获取数据,并将它们放在同一个ObservalArray中。我正在考虑第一个ajax调用。控制器只返回纯整数值,而不返回任何json包装,这可能是个问题吗?computed应该计算一个依赖于视图模型中其他值的值。这就是它的效果。它不应该更改视图模型上的值(更不用说它自己的基值)。这将是一个副作用。我想,您只需要在主Ajax调用之后再调用第二个Ajax调用。查看jQuery的
.then()
链接Ajax调用,并去掉这里的计算结果。好的,但是可以将几个ViewModel绑定到同一个元素吗?我做了更改,但这没有帮助。