我的代码不会在由knockout.mapping.fromJS映射的挖空视图模型的子元素下创建新属性。Knockout.js将属性添加到子元素
我有:
//model from Entity Framework
console.log(ko.mapping.toJSON(model));
var viewModel = ko.mapping.fromJS(model, mappingOption);
ko.applyBindings(viewModel);
console.log(ko.mapping.toJSON(viewModel));
第一输出的console.log:
{
"Id": 0,
"CurrentUser": {
"BoardIds": [
{
"Id": 0
}
],
"Id": 1,
"UserName": "foo",
"IsOnline": true
},
"Boards": []
}
然后是mappingOption是:
var mappingOption = {
create: function (options) {
var modelBase = ko.mapping.fromJS(options.data);
modelBase.CurrentUser.UserName = ko.observable(model.CurrentUser.UserName).extend({ rateLimit: 1000 });
//some function definitions
return modelBase;
},
'CurrentUser': {
create: function (options) {
options.data.MessageToPost = ko.observable("test");
return ko.mapping.fromJS(options.data);
}
}
};
我称为this post以创建自定义映射,但它似乎不起作用,因为第二个console.log输出与第一个相同的JSON。
此外,我试图创建基于this thread和another one的嵌套映射选项,但它不起作用。
var mappingOption = {
create: function (options) {
//modelBase, modifing UserName and add the functions
var mappingOption2 = {
'CurrentUser': {
create: function (options) {
return (new(function() {
this.MessageToPost = ko.observable("test");
ko.mapping.fromJS(options.data, mappingOption2, this);
})());
}
}
}
return ko.mapping.fromJS(modelBase, mappingOption2);
}
};
如何正确添加一个新的属性到原始viewmodel?
谢谢回答,我来输出由toJS删除“映射”管理整个视图模型。但是,的确,我的兴趣是将新属性添加到视图模型的子数组的方式。我的代码成功地将一个属性添加到视图模型的根级别,但是当涉及到嵌套级别时,它失败了。 –
@ seed.of.apricot见编辑。 –
@ seed.of.apricot这是否解决了您的问题,或者您仍然无法使其工作? –