[英]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.