如何使用KnockoutJS和映射插件观察子对象?

时间:2013-05-03 13:25:01

标签: knockout.js mapping viewmodel

使用类似的JSON:

JSON字符串

{ 
  "SelectedOption" : {}, 
  "Options" : [ 
    { "ID": 0, "Name": "Zero" },
    { "ID": 1, "Name": "One" }
  ] 
}

问题是:如何告诉映射插件SelectedOption属性是 ko.observable

客户代码

var _json = '{
               "SelectedOption" : {},
               "Options" : [   
                 { "ID": 0, "Name": "Zero" },
                 { "ID": 1, "Name": "One" }    
               ]
             }';

var viewModel = ko.mapping.fromJSON(_json);
ko.applyBindings(viewModel);

我写了一个jsfiddle来显示问题 http://jsfiddle.net/BvVce/3/

1 个答案:

答案 0 :(得分:4)

您必须提供自定义映射以指示映射函数应如何执行此操作。我已更新了您的fiddle

这是自定义映射,以及对ko.mapping的更改调用:

var mapping = {
    'SelectedOption': {
        create: function(options) {
            return ko.observable(options.data);
        }
    }
}

var viewModel = ko.mapping.fromJSON(_json, mapping);

然后,在HTML中,您必须将“()”字符添加到SelectedOption,因为它现在是一个可观察的字符,如下所示:

<span data-bind="text: SelectedOption().ID"></span>