如何在Ember.js中标准化我对moment.js的使用

时间:2015-10-22 16:19:38

标签: ember.js ember-data momentjs

我有一个Ember应用程序,它从服务器接收几个可能包含日期的数据模型。

我正在使用moment.js来管理和操作浏览器中的日期。转换和管理变得混乱。

我想简化,并将所有日期统一用作moment.js对象。但是将JS Date对象与服务器进行所有通信。我怎样才能做到这一点?

1 个答案:

答案 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对象。