2016-03-25 13 views
0

私は観測可能なラジオボタンを持っています。値に応じて、私はデータを返し、リストとして表示している観測可能な配列にプッシュするGETJSONメソッドをトリガーしたいと思います。私が得るエラーは 未定義のプロパティ 'プッシュ'を読み取ることができません。ここにありますFiddlejsonをノックアウト観測可能な配列にプッシュ

ラジオボタンをクリックしてgetjsonメソッドをトリガした後、どのようにこのデータを観測可能な配列に取得しますか?

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データをアイテムの観測可能な配列に移動してテキスト領域を読み込んで、サーバーに返すように選択可能にすることです。このすばらしい答えをありがとう! –

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/ –

関連する問題