1

現在、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() の階層として返します。

4

2 に答える 2