2016-08-25 6 views
0

jsonオブジェクトをknockout.jsの観測可能な配列に変換しようとしています。すべてがうまく動作しますが、console.logの配列を取得するたびに代わりに関数が返されます。ここでは、次のコードでKnockOut観測可能な配列の出力関数で、値を反映しない

...

var jsondata = ko.mapping.toJSON(data); 
self.A1 = ko.mapping.fromJSON(jsondata); 
console.log(A1.org()[0].suborg()[0].orgactivities()[0]); 

私はこの取得:私のJSONは次の形式を次の

enter image description here

を...

enter image description here

どれでもコンソールを取得する方法l私の値の正しい入力はどうですか?私はコードを()内に入れていますが、まだ動作していません。どんな助けも歓迎されるでしょう。

答えて

1

あなたのデータならばJSON文字列です。関数ko.mapping.fromJSONを使用してビューモデルを作成できます。

あなたのデータはすでにそれが非マップにをマッピングされている場合:あなたが最初ko.mapping.toJSONを使用している理由は、私はわからないko.mapping.toJSON

を使用することができます。 ?!! データがシリアル化されたJSONとして表示されるため、以下のコードが機能します。

例:https://jsfiddle.net/kyr6w2x3/59/

var jsondata ={ 
    "org":[ 
     { 
     "orgname":"name", 
     "suborg":[ 
      { 
       "nameofsuborg":"nameofsuborg", 
       "orgactivities":"activityName" 
      } 
     ] 
     } 
    ] 
} 
function AppViewModel() { 
var self = this; 
    self.A1 = ko.mapping.fromJS(jsondata); 
    console.log(self.A1.org()[0].orgname()) 
    console.log(self.A1.org()[0].suborg()[0].nameofsuborg()); 
    console.log(self.A1.org()[0].suborg()[0].orgactivities()); 

} 
ko.applyBindings(new AppViewModel()); 
1

ko.utils.unwrapObservableを使用してください。アンラッピングを開始するレベルを明示的に選択することができます。しかし、ロギング以外の目的でボトムレベルのオブジェクトをPOJOにする場合は、ko.mapping.fromJSONの2番目のパラメータを使用してマッピングを手動で行う必要があります。これはhereを読むことができます。

これは、あなたの質問にだけ接線方向に関連しているが、あなたはより良い行い、別のマッピング・プラグインは、(私はそれが非常に大きくなる可能性のようなあなたの構造が見えることに気づいた)があることを知っている必要があります。knockout.viewmodel

関連する問題