我目前正在尝试将我的 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() 的层次结构返回。