gpt4 book ai didi

jquery - Knockout.js 和 null

转载 作者:行者123 更新时间:2023-12-01 07:23:45 25 4
gpt4 key购买 nike

我在丰富的 Web 客户端中使用 Knockout.js + Knockout 映射插件 + jQuery 的组合,该客户端使用 JSON RESTful API。

我需要一些有关如何处理 View 模型中的空值的指导。这是我的场景和遇到的问题:

REST API 返回的大多数数据成员都是可为空的。为了解决这个问题,我将一个带有空值的 JSON 示例传递给映射插件:

um.jsonMaps.campaign = {
"priority": null,
"recipientListId": null,
"autoPrepare": null,
"timeToSend": null
}

我像这样进行初始绑定(bind):

this.model = ko.mapping.fromJS(um.jsonMaps.campaign);

以下是来自 API 调用的一些数据:

var data= {
"priority": 95,
"recipientListId": "a2aac72a-59f6-45da-a636-a48cc2b20137",
"autoPrepare": false,
"timeToSend": null
}

...绑定(bind)如下:

ko.mapping.fromJS(data, this.viewModel.model);

问题是,如果用户修改或触摸绑定(bind)到此数据的任何 UI 元素,他们就会隐式地将模型中的数据成员转换为带引号的字符串文字 。因此,如果用户添加一些文本并将其删除,则整数 95 将变为 “95”。如果在 UI 中触及 API 中的 null 值,则它会变为 ""(例如空字符串)。

我需要在编辑后将整数和空值保留为整数和空值。

最佳答案

在我的项目中,我最终根据服务器的数据创建了 View 模型。我添加了带有 getter 和 setter 的新属性,以便它在需要时写入数值:

function DataViewModel(dataModel) {
var self = this;
self.priority = ko.observable(dataModel.priority);
self.recipientListId = ko.observable(dataModel.recipientListId);
self.autoPrepare = ko.observable(dataModel.autoPrepare);
self.timeToSend = ko.observable(dataModel.timeToSend);



self.priorityKo = ko.computed({
read: function () {
return self.priority().toFixed(2);
},
write: function (value) {
value = parseFloat(value.replace(/[^\.\d]/g, ""));
if (isNaN(value)) {
self.priority(-1); // to fire 'changed' event
self.priority(0); // final value in case of incorrect user input
} else {
self.priority(value); // real numeric value
}
},
owner: this
});

您的映射将如下所示:

this.model = ko.mapping.fromJS(new DataViewModel(um.jsonMaps.campaign));

关于jquery - Knockout.js 和 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11042839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com