2017-03-23 64 views
0

我想通過ajax調用來獲取json對象,並將其放入knockout observable中。如何將異步調用返回的Json數據正確綁定到knockout observableArray

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數據。

我在做什麼錯?

回答

3

只需從self.arnVal().push(...)刪除額外的parens。

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

目前,parens正在拆箱observable數組,並將新項目推送到底層javascript數組。這繞過淘汰賽的事件觸發器。

2

刪除這裏的括號:

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

見規格:http://knockoutjs.com/documentation/observableArrays.html

變種myObservableArray = ko.observableArray(); //最初是一個空數組 myObservableArray.push('Some value'); //將值並通知觀察者

原因是self.arnVal是可觀察到的陣列而self.arnVal()是一個簡單的陣列(其不具有通知功能)。

相關問題