現在、MVC ビュー モデルをノックアウト ビューモデルにマップしようとしています。これを自動的に行うために、ノックアウト用のマッピング拡張機能を使用しています。
かみそりのコードでビューモデルを直接参照できるので、JavaScriptが表示されているときに動作させることができます...
var model = @Html.Raw(Json.Encode(Model)) indexViewModel.serverViewModel = ko.mapping.fromJS(model);
ただし、javascript が別のファイルにある場合、どうすればよいかわかりません。
MVC ビュー モデルを隠し変数に入れることにしました (これを行うつもりかどうかはわかりません)。
@Html.Hidden("Model", @Html.Raw(Json.Encode(Model)))
そして、私のJSでそれを参照します
var model = $('#Model').val();
indexViewModel.serverViewModel = ko.mapping.fromJS(model);
現在の問題は、マッピングされていないように見えることです。
JS-in-View と個別の JS ファイル バージョンの両方でモデルの内容を確認しましたが、どちらも出力されます
{"companies":[{"Key":1,"Value":"BHP "}]}
これは私が求めているJSONです。
別の JS ファイルでは、何らかの理由で ko.mapping.fromJS(model) が文字列を返しますが、JS-in-View バージョンはそれを observables() の階層として返します。