我有一个Ember应用程序,它从服务器接收几个可能包含日期的数据模型。
我正在使用moment.js来管理和操作浏览器中的日期。转换和管理变得混乱。
我想简化,并将所有日期统一用作moment.js对象。但是将JS Date对象与服务器进行所有通信。我怎样才能做到这一点?
答案 0 :(得分:2)
这是我找到的简单解决方案,部分归功于之前的相关question
首先,创建一个转换数据类型的序列化/反序列化转换:
App.MomentTransform = DS.Transform.extend({
deserialize: function (serialized) {
return serialized
? moment(serialized).locale((navigator.language || navigator.browserLanguage).slice(0, 2))
: null;
},
serialize: function (deserialized) {
return deserialized
? deserialized.toDate()
: null;
}
});
其次,注册转换:
App.register("transform:moment", App.MomentTransform);
第三,对模型定义中的任何日期使用变换:
App.MyModel= DS.Model.extend({
someData: DS.attr('number'),
dateTime: DS.attr('moment') <--
});
通过这种方式,所有日期都将作为时刻对象进入应用程序,并在发送到服务器之前转换回JS Date对象。