gpt4 book ai didi

javascript - 使用 moment.js 支持扩展 knockout.js 映射

转载 作者:行者123 更新时间:2023-11-29 10:45:29 27 4
gpt4 key购买 nike

是否有可能扩展 knockout 映射插件以在取消映射时处理不同类型的映射?

我有这个模型:

var Model = function () {
var self = this;

self.requestFrom = ko.observable(moment().subtract("days", 1));
self.requestTo = ko.observable(moment());
// additional properties.
};

为了从中得到一个普通的 JavaScript 对象,我正在做:

var model = new Model();
var obj = mapping.toJS(model, {
"ignore": ["requestFrom", "requestTo"]
});
obj.requestFrom = model().requestFrom().toISOString();
obj.requestTo = model().requestTo().toISOString();

我想避免手动处理 moment 对象的翻译,而是编写一些扩展到 knockout 映射,知道如何处理 moment 类型的对象,并将它们作为 ISO 字符串表示形式返回。

有什么想法吗?

最佳答案

通常,当您将对象作为 Ajax 参数传递时,它会自动调用 toJSON()

它可能不是您正在寻找的直接答案,但我认为在您的模型上添加自定义 toJSON() 效果很好。您可以非常精确地控制发送数据的哪一部分以及以何种格式发送。

var Model = function () {
var self = this;

self.requestFrom = ko.observable(moment().subtract("days", 1));
self.requestTo = ko.observable(moment());

// additional properties.

self.toJSON = function()
{
return {
requestFrom: self.requestFrom(),
requestTo: self.RequestTo(),
otherProperty: self.otherProperty()
}
}
};

您可以直接在 Ajax 请求中使用它,而无需手动转换。

var model = new Model();

$.ajax({
url: '/test/PersonSubmit',
type: 'post',
dataType: 'json',
data: model
});

请注意,moment() 的默认 toJSON() 实现已经是 toISOString()。查看moment.js源码:

// add aliased format methods
moment.fn.toJSON = moment.fn.toISOString;

关于javascript - 使用 moment.js 支持扩展 knockout.js 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20412532/

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