几天来,我一直在为这个问题绞尽脑汁,无法想出一个像样的解决方案。
我有以下型号
{
"id": "123",
"key1": "foo",
"key2": "bar",
"metadata": {
"height": 1,
"width": 1
},
"userPrefs": [
{
"name":"firstName",
"displayName":"First name",
"required":true,
"dataType":"text",
"defaultValue":"enter first name",
"value": ""
},
......
]
}
我的视图使用这个模型,特别是 userPrefs,来创建一个编辑表单。因此,例如 userPrefs 会生成这样的输入
<input type="text" id="firstName" name="firstName" value="" placeholder="enter first name" required />
然后用户可以输入名字的值——例如“John”并点击保存。在发出 PUT 请求之前,我需要将此表单数据映射回模型。
所以我劫持了提交事件并做
this.$('form').serializeArray()
这将返回一个键/值对数组,例如
[{"firstName": "John"}]
现在我遇到的问题是如何最好地将这些值映射回模型中正确的 userPref。
我玩弄了“假设” 5 个 userPrefs 会导致 5 个输入的想法。然后我可以使用带有索引的迭代器来更新正确的 userPref。但是我们知道,一个未选中的复选框不会被提交,所以一个简单的迭代器不会工作。
然后我尝试获取每个序列化值并循环通过 userPrefs 进行匹配。但这仍然会因上面提到的复选框问题而失败。
谁能看到一个优雅的解决方案?
- 我应该使用更好的 json 结构来解决这个问题吗?可能是一个仅包含 userPrefs 的单独模型
- 我如何知道用户是否取消选中复选框并能够更新我的模型