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