我试图通过ajax调用获取json对象,并将其放入可观察到的淘汰赛中。

var self = this;
this.arnVal = ko.observableArray([]);

var promise = $.getJSON('../../url/to/my/api');

promise.done(function(data) {
         console.log(data);
         console.log(data["metricValues"]);
         self.arnVal().push(data["metricValues"]);
         console.log(self.arnVal());
      });


promise.done()函数调用中的控制台日志可以正确打印期望值。也就是说,数据采用与之绑定的Oracle Jet组件所期望的正确数组格式。

这段代码位于Knockout组件的javascript文件中,我正在其他地方的HTML文件中使用它作为Knockout组件的一部分。
在组件的HTML文件中,我正在使用arnVal填充Oracle Jet图表。

但是,该图表永远不会填充通过arnVal调用获得的更新的getJSON数据。

我究竟做错了什么?

最佳答案

只需从self.arnVal().push(...)中删除​​多余的括号。

self.arnVal.push(data["metricValues"]);


当前,paren正在将可观察数组拆箱并将新项目推送到基础javascript数组。这绕过了淘汰赛的事件触发器。

关于javascript - 如何将异步调用返回的Json数据正确绑定(bind)到 knockout 的ObservableArray,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42981165/

10-11 12:17