【问题标题】:How to make sure property gets mapped as observable如何确保属性被映射为可观察的
【发布时间】:2013-02-12 15:12:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net-mvc-3 knockout.js knockout-mapping-plugin


    【解决方案1】:

    在您的情况下, 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);
    

    【讨论】:

    • var mapping = { 'SelectedItem' : { ... 做到了。谢谢,这是完美的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2019-03-19
    • 2017-12-17
    • 2018-12-05
    • 2014-07-27
    • 2012-08-07
    • 2016-09-25
    相关资源
    最近更新 更多