繁体   English   中英

如何将异步调用返回的Json数据正确绑定到敲除的ObservableArray

[英]How to bind Json data returned by a asynchronous call to a knockout observableArray correctly

我试图通过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图表。

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

我究竟做错了什么?

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

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

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

在此处删除括号:

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

请参阅规格: http : //knockoutjs.com/documentation/observableArrays.html

var myObservableArray = ko.observableArray(); //最初是一个空数组myObservableArray.push('Some value'); //添加值并通知观察者

原因是self.arnVal是一个可观察的数组,而self.arnVal()是一个简单的数组(不具有通知功能)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM