ko.mapping.toJSON()-方法的淘汰赛映射选项
Knockout mappingOptions for ko.mapping.toJSON()-method
问题
我正在尝试将修改后的 viewModel 发送回我的服务器。不幸的是,我必须使用 ko.mapping.fromJSON() 和一些 mappingOptions 创建我的 viewModel,它工作正常。现在我需要一种简单方法将创建的 viewModel 转换回原始方案。
想要的结果
我想转换为:
var myModel = {
simpleProp: "test",
complexProp: {
simpleProp2: "test2",
simpleProp3: "test3"
}
};
进入那个(JS):
var myModel = {
simpleProp: "test",
modifiedToSimpleProWithNewName: "test2"
};
给我这个 JSON:
{"simpleProp":"test","modifiedToSimplePropWithNewName": "test2"}
尝试次数
我在想,既然ko.mapping.toJSON有一个映射参数,那么为这个方法创建另一个映射就很容易了。但似乎 ko.mapping 实际上忽略了我的自定义 属性 creation:
var mappingOptions = {
// ignored
'simpleProp': {
create: function (thing) {
return "Changed simpleProps value";
}
},
// working
ignore: ["simpleProp3"]
};
更多信息
我已经为你创建了一个jsFiddle。
请注意:我使用 fromJSON:
简化了删除模型生成的示例
// created and modified by ko.mapping.fromJSON - with custom mapping!
var myModel = {
simpleProp: "test",
complexProp: {
simpleProp2: "test2",
simpleProp3: "test3"
}
};
结果将是:
{"simpleProp":"test","complexProp":{"simpleProp2":"test2"}}
如您所见,将应用 ignore 选项,而不会应用 'simpleProb'/create .
非常感谢任何帮助。谢谢!
PS:我知道这个映射不会达到预期的结果。这只是一个 "will 'simpleProp' be modified?"-测试。
toJSON 方法的映射插件将像 JSON.stringify 函数一样,检查并使用任何 toJSON 方法的 return 值字符串化为 JSON.
之前的对象
因此你可以这样做 (updated jsfiddle):
var myModel = {
simpleProp: "test",
complexProp: {
simpleProp2: "test2",
simpleProp3: "test3"
},
toJSON: function () {
return {
simpleProp: this.simpleProp,
complexProp: this.complexProp.simpleProp2
};
}
};
只需让 toJSON 方法按照您希望的方式格式化对象,就可以了。
问题
我正在尝试将修改后的 viewModel 发送回我的服务器。不幸的是,我必须使用 ko.mapping.fromJSON() 和一些 mappingOptions 创建我的 viewModel,它工作正常。现在我需要一种简单方法将创建的 viewModel 转换回原始方案。
想要的结果
我想转换为:
var myModel = {
simpleProp: "test",
complexProp: {
simpleProp2: "test2",
simpleProp3: "test3"
}
};
进入那个(JS):
var myModel = {
simpleProp: "test",
modifiedToSimpleProWithNewName: "test2"
};
给我这个 JSON:
{"simpleProp":"test","modifiedToSimplePropWithNewName": "test2"}
尝试次数
我在想,既然ko.mapping.toJSON有一个映射参数,那么为这个方法创建另一个映射就很容易了。但似乎 ko.mapping 实际上忽略了我的自定义 属性 creation:
var mappingOptions = {
// ignored
'simpleProp': {
create: function (thing) {
return "Changed simpleProps value";
}
},
// working
ignore: ["simpleProp3"]
};
更多信息
我已经为你创建了一个jsFiddle。
请注意:我使用 fromJSON:
简化了删除模型生成的示例// created and modified by ko.mapping.fromJSON - with custom mapping!
var myModel = {
simpleProp: "test",
complexProp: {
simpleProp2: "test2",
simpleProp3: "test3"
}
};
结果将是:
{"simpleProp":"test","complexProp":{"simpleProp2":"test2"}}
如您所见,将应用 ignore 选项,而不会应用 'simpleProb'/create .
非常感谢任何帮助。谢谢!
PS:我知道这个映射不会达到预期的结果。这只是一个 "will 'simpleProp' be modified?"-测试。
toJSON 方法的映射插件将像 JSON.stringify 函数一样,检查并使用任何 toJSON 方法的 return 值字符串化为 JSON.
之前的对象因此你可以这样做 (updated jsfiddle):
var myModel = {
simpleProp: "test",
complexProp: {
simpleProp2: "test2",
simpleProp3: "test3"
},
toJSON: function () {
return {
simpleProp: this.simpleProp,
complexProp: this.complexProp.simpleProp2
};
}
};
只需让 toJSON 方法按照您希望的方式格式化对象,就可以了。