0

我有将 DateTextBox 和 TimeTextBox 的输入序列化为 JSON 的问题 - 在序列化过程中进行时区转换,这迫使我将时区发送到服务器并在那里进行适当的调整。

为了防止出现这种情况,我想更改日期格式以进行序列化。我可以更改 Date 的原型,如此所述(我已在JSFiddle中完成),但我不希望更改单个请求范围内的行为。像这样的东西:

 someDojoUtil.jsonSerialize(obj, {option1: 'value1'...})

Dojo 是否提供了实现它的方法,或者唯一的方法是全局更改 Date 的原型?

4

1 回答 1

1

基于 OP 中的评论阐述,我将使用 Json.stringify 的第二个参数,即所谓的“替换器”。像这样的东西:

require(['dojo/json'], function(Json) {
    function replacer(key, value) {
        if ('string' === typeof (value)) {
            var d = new Date(value);
            if (isNaN(d.getTime())) {
                return value; // string, but not a date
            }

            // do whatever you want to do, this is just an example
            d.setSeconds(0);

            return d.toJSON();
        }
        return value;
    }
    var data = {'a':new Date(), 'b':123, 'c':'foo', 'd':[new Date()]};
    var str = Json.stringify(data, replacer);
    console.log(str);
});

我建议将其编写为 dojo/request 的 mixin,然后为自己创建一个具有此行为的自定义请求类,然后​​根据需要使用该自定义请求对象。

这感觉很骇人听闻,但我认为它会满足您的需求(据我了解!)。

于 2013-10-29T01:36:09.783 回答