簡體   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