所以我有一个像这样的ViewModel:
public class ViewModel{
// Constructors, other properties
public List<ItemViewModel> Items { get; set; }
public ItemViewModel SelectedItem {get;set;}
public void InitializeViewModel(){
//Case 1:
SelectedItem = null;
//Case 2:
SelectedItem = Item.FirstOrDefault();
}
}
在我的cshtml中,我有以下内容:
var viewModel = ko.mapping.fromJS(@Html.Raw(Model.ToJson()));
我注意到这一点是 ko.mapping.fromJS 将 Case 1 绑定为observable。但是,当设置 Case 2 时,ko.mapping.fromJS不会将SelectedItem映射为observable。
如何设置我的代码以便实现Case2并且ko.mapping.fromJS映射SelectedItem属性?
以下是破解代码:https://skydrive.live.com/redir?resid=33048714B5BF3B4B!1261
答案 0 :(得分:2)
在您的情况下,ko.mapping会将ItemViewModel的属性映射到observable,但不会映射到ItemViewModel本身。如果要使ItemViewModel映射,可以将映射定义为:
var mapping = {
'SelectedItem': {
create: function (options) {
return ko.observable(options.data);
}
}
并调用js转换:
var viewModel = ko.mapping.fromJS(@Html.Raw(Model.ToJson()), mapping);