2016-03-25 138 views
0

我有單選按鈕,這是可觀察的,取決於我想觸發GETJSON方法返回我的數據,然後將其推送到一個可觀察數組,我將顯示爲一個列表的值。我得到的錯誤是 無法讀取未定義的屬性「推」。這是我的Fiddle推JSON淘汰可觀察陣列

單擊單選按鈕後觸發getjson方法後,我如何獲得此數據到我的observable數組?

self.currentAnswer = ko.observable(); 
    self.recipientList = ko.observableArray([]); 
self.currentAnswer.subscribe(function (newValue) { 
    if (newValue == 'Internal') { 
     $.getJSON('GetInfo', function (data) { 
      var result = $.parseJSON(data); 

      self.recipientList.push(result); 


     }); 
+1

我更新了小提琴(https://jsfiddle.net/jsw1ezut/7/)。它能解決你的任務嗎? – TSV

+0

這幫我解決了它。 https://jsfiddle.net/Domt301/c54x6d14/ –

回答

1

需要考慮的事情:

  • $.getJSON()將解析JSON你,你從來不需要自己做。對於$.get()也是如此。 (*)
  • 敲除觀察值是函數。你可以使用它們作爲回調。 (**)

瞭解了這一點:

self.recipientList = ko.observableArray(); 
self.currentAnswer = ko.observable(); 
self.currentAnswer.subscribe(function (newValue) { 
    if (newValue == 'Internal') { 
     $.get('GetInfo').done(self.recipientList); 
    } 
}); 

(*)如果你沒有在你的成功回調解析的獲取JSON,解決您的響應Content-Type頭。

(**)如果您調用observable並傳遞一個值作爲第一個參數,它將存儲該值。巧合的是,jQuery調用傳遞返回值作爲第一個參數的Ajax成功回調函數。完美契合。

+0

沒有意識到,非常整潔! –

+1

將這個小提琴與一些改進(以及實際的Ajax請求)進行比較:https://jsfiddle.net/jsw1ezut/11/ – Tomalak

+0

這與ajax調用很酷,我不熟悉params的使用。最後,我試圖完成的是加載一個文本區域,將JSON數據移動到項目observable數組中,並使其可選擇發送回服務器。謝謝你這個可怕的答案! –

1

我更新了你的小提琴,使它工作。基本上你需要調用self.recipientList.push.apply(self.recipientList, result);

https://jsfiddle.net/jsw1ezut/9/

+0

這工作,但它推入收件人列表數組,我試圖把它放入items數組中。 –

+0

@Leonardo示例代碼中沒有項目數組。 – Tomalak

+0

我之前根據@TSV評論進行了更新。 https://jsfiddle.net/Domt301/c54x6d14/ –