ノックアウト js を学習しようとしていますが、子供たちの観察可能な仕組みがわかりません! SOでも多くの記事と多くの問題を読んでみましたが、おそらくどこかで何かが欠けています。
私のjson構造は(Rails jsonレンダラーによって生成されます):
アルバム -> トラック -> メタデータ
Album
-Track
--Metadata
-Track
--Metadata
Album
-Track
-- Metadata
等
私のビューもネストされています。ページでは、各アルバムは div の下にあり、各トラックは上記の div のテーブル行の下にあります。
私のビューと JS コードは JS Fiddle にあります。http://jsfiddle.net/var56/
問題: JSFiddle でビューを表示すると、動作している (アルバム) と動作していない (トラック) html 部分をマークしたことがわかります。正しくレンダリングされた初期ビュー。テキスト フィールドでアルバム名を更新すると、上記の h2 が正しく更新されます。しかし、トラック テンプレートでは、トラック タイトルを更新すると、下のスパンで更新されません。
さらに、クロムコンソールでデータをエクスポートしようとしました。
ko.toJSON(viewModel)
または、ko.mapping.toJSON(viewModel)
古いデータが返されます (つまり、変更された値は返されません)。
また、アルバムとトラックを追加/削除し、viewModel とビューに同じものを反映させます。
私は何かが欠けていますか?
注: 実際の JSON データは次のとおりです。
[
{ "id":9,
"image_path":null,
"name":"Test Album",
"price":null,
"sort_order":null,
"tracks":[
{ "file_name":"01._Ei_Mon_Joshonay.mp3",
"file_path":"/media/tracks/1/01._Ei_Mon_Joshonay.mp3",
"id":192,
"length":null,
"metadata":{
"artist":"Aroti (MR present)",
"composer":"",
"created_at":"2012-09-10T11:33:42Z",
"duration":211,
"genre":"Other",
"id":124,
"lyrics":null,
"title":"01. Ei Mon Joshonay.mp3",
"track_id":192,
"updated_at":"2012-09-10T11:33:54Z",
"year":0
},
"price":null,
"thumb":"/media/track_thumbs/1/thumb_192.jpg",
"title":"01. Ei Mon Joshonay.mp3"
},
{ "file_name":"03._Jare_Ure_Ja_Pakhi.mp3",
"file_path":"/media/tracks/1/03._Jare_Ure_Ja_Pakhi.mp3",
"id":193,
"length":null,
"metadata":{
"artist":"MR present",
"composer":"",
"created_at":"2012-09-10T11:33:48Z",
"duration":204,
"genre":"lata",
"id":125,
"lyrics":null,
"title":"03.Jare ure ja pakhi",
"track_id":193,
"updated_at":"2012-09-10T11:33:54Z",
"year":0
},
"price":99.0,
"thumb":null,
"title":"03.Jare ure ja pakhi"
}
]
},
{ "id":11,
"image_path":null,
"name":"Album 2",
"price":null,
"sort_order":null,
"tracks":[ ]
}
]
アップデート:
何も機能しませんでした。今、私は直面している問題をシミュレートできるjsFiddleを作成しようとしました。
http://jsfiddle.net/Bb538/3/を確認してください。
マッピング オブジェクトも作成しました (参照されていないコードが表示される場合がありますが、必要に応じて試すことができます)。アルバム名が正しく更新されていることがわかります。ただし、タイトルとファイル名のフィールドは、隣接するスパンを更新していません (同じオブザーバブルにバインドされています)。