0

我正在尝试通过 ajax 调用获取一个 json 对象,并将其放入一个淘汰赛 observable 中。

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

我究竟做错了什么?

4

2 回答 2

3

只需从self.arnVal().push(...).

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

目前,parens 正在拆箱 observable 数组并将新项目推送到底层 javascript 数组。这绕过了淘汰赛的事件触发器。

于 2017-03-23T16:21:28.560 回答
2

去掉这里的括号:

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

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

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

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

于 2017-03-23T16:24:03.777 回答