1

所以我有一个这样的 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将案例 1绑定为可观察的。但是,当设置案例 2时,ko.mapping.fromJS 不会将 SelectedItem 映射为可观察的。

如何设置我的代码以便实现 Case2 并且 ko.mapping.fromJS 映射 SelectedItem 属性?

这是破解代码:https ://skydrive.live.com/redir?resid=33048714B5BF3B4B!1261

4

1 回答 1

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);
于 2013-02-27T01:48:51.150 回答