我正在按照Knockoutjs网站上的mapping插件示例进行工作。
这是示例数据。
var data = {
name: 'Scott',
children: [
{ id : 1, name : 'Alice' }
]
}
这个示例展示了如何覆盖其中一个子对象的映射,但我该如何修改基本对象的映射呢?
例如,如果我想要为Scott添加一个“喜爱的孩子”属性,我该怎么做呢?
我猜我需要在基础映射上使用create函数,但是我无法在任何地方找到语法示例。
var myChildModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.nameLength = ko.computed(function() {
return this.name().length;
}, this);
}
var mapping = {
'children': {
create: function(options) {
return new myChildModel(options.data);
}
}
}
var viewModel = ko.mapping.fromJS(data, mapping);
编辑: 根据下面被接受的答案,我发现这个方法可行。
<span data-bind='text: AdditionalProperty'>
Knockout代码
var mapping = {
create: function (options) {
//customize at the root level.
var innerModel = ko.mapping.fromJS(options.data);
innerModel.AdditionalProperty = 'Hello World';
return innerModel;
}
}
var viewModel = ko.mapping.fromJS(data, mapping);
//use this as our model bindings
ko.applyBindings(viewModel);