【发布时间】:2012-06-14 23:40:56
【问题描述】:
我在一个使用 JSON 的富 Web 客户端中结合使用 Knockout.js + Knockout 映射插件 + jQuery一个 RESTful API。
我需要一些关于在我的视图模型中如何处理空值的指导。这是我的场景和我遇到的问题:
REST API 返回的大多数数据成员都是可为空的。为了解决这个问题,我向映射插件传递了一个带有空值的 JSON 样本:
um.jsonMaps.campaign = {
"priority": null,
"recipientListId": null,
"autoPrepare": null,
"timeToSend": null
}
我像这样进行初始绑定:
this.model = ko.mapping.fromJS(um.jsonMaps.campaign);
以下是来自 API 调用的一些数据:
var data= {
"priority": 95,
"recipientListId": "a2aac72a-59f6-45da-a636-a48cc2b20137",
"autoPrepare": false,
"timeToSend": null
}
...绑定如下:
ko.mapping.fromJS(data, this.viewModel.model);
问题是,如果用户修改或触摸任何绑定到此数据的 UI 元素,他们会隐式地将模型中的数据成员转换为 带引号的字符串文字 .因此,如果用户添加一些文本并将其删除,整数 95 将变为 "95"。如果在 UI 中触摸了 API 中为 null 的值,它就会变为 ""(例如空字符串)。
我需要整数和空值在编辑后保留为整数和空值。
【问题讨论】:
-
如果您想继续使用映射插件并且不想提供广泛的映射选项,那么您可以查看使用包装值绑定的自定义绑定,如此答案中所述:@987654321 @.
-
这是另一个很好的链接。立即查看信息。
-
我查看了此信息,但觉得自定义绑定引入了我并不真正需要的复杂程度。我最终接受的答案起到了作用,同时让我继续使用本机“文本”和“值”绑定。对于自定义绑定和 KO.computed observables,我不得不编写大量代码,因为我们的 API 需要对空值(字符串、数字、日期甚至布尔值)进行特殊处理。使用计算的 observables 实际上减少了我的代码。
标签: jquery rest null knockout.js knockout-mapping-plugin