Knockout mapping用于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实际上忽略了我的自定义属性创建:
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"}}
正如您所看到的,忽略选项将被应用,而的"简单抢劫"/create则不会。
非常感谢您的帮助。非常感谢。
附言:我知道这种映射不会达到预期的结果。这只是一个"‘impleDrop’会被修改吗?"-测试。
映射插件toJSON方法将像JSON.stringify函数一样,在将对象字符串化为JSON之前,检查并使用对象上可能存在的任何toJSON方法的返回值。
因此,你可以这样做(更新的jsfiddle):
var myModel = {
simpleProp: "test",
complexProp: {
simpleProp2: "test2",
simpleProp3: "test3"
},
toJSON: function () {
return {
simpleProp: this.simpleProp,
complexProp: this.complexProp.simpleProp2
};
}
};
只要让toJSON方法按照您希望的方式格式化对象,就可以了。
相关文章:
- 我的单元测试选项是什么
- 如何更改bigquery API中的计费层选项
- 使用Javascript获取所选选项ID
- Selectize.js:如何对整数值的选项进行排序
- 通过js在新选项卡中有条件地打开url
- 按照选项卡索引的顺序循环一个jQuery选择
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 无法在Ionic select中预先选择最后一个选项
- 如何在选项卡上定义属性'的主窗口对象
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 使用此选项选择父类内部的类
- CKeditor:更改对话框中的默认选择选项
- JQuery覆盖不更改单选选项
- 活动选项卡's源代码-获取变量s值
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- 如何从选择框中的选项中获取属性值
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- 如何从外部页面激活非默认引导选项卡
- Knockout mapping用于ko.mapping.toJSON()的选项-方法