首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当ember data进行序列化时,修改日期格式的最好方法是什么?

当ember data进行序列化时,修改日期格式的最好方法是什么?
EN

Stack Overflow用户
提问于 2013-03-29 09:07:53
回答 4查看 11.4K关注 0票数 20

在我的ember-data适配器中,我使用下面这一行来序列化我的模型

代码语言:javascript
复制
var data  = record.serialize();

但我注意到我的模型有日期类型...

代码语言:javascript
复制
App.Foo = DS.Model.extend({
    start: DS.attr('date')
});

..。我会将这样的日期发布到我的REST api

Sat,2013年3月2日22:15:00 GMT

但是我需要更友好的api,比如yyyy-mm-dd或mm/dd/yyyy

ember-data是否提供了一个钩子来改变通过网络发送日期的方式?

我假设不是,因为这是ember data rev 11中序列化方法的实际返回行

代码语言:javascript
复制
return dayOfWeek + ", " + dayOfMonth + " " + month + " " + utcYear + " " + pad(utcHours) + ":" + pad(utcMinutes) + ":" + pad(utcSeconds) + " GMT";

更新

我还打开了一个关于ember-data的问题,以了解为什么选择这种格式作为开始

https://github.com/emberjs/data/issues/845

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-29 09:43:44

您可以注册自定义序列化程序转换。

代码语言:javascript
复制
DS.RESTAdapter.registerTransform("isodate", {
  deserialize: function(serialized) {
    return serialized;
  },

  serialize: function(deserialized) {
    return deserialized;
  }
});

然后将其用作start: DS.attr("isodate"),当然要正确定义序列化/反序列化:)

票数 14
EN

Stack Overflow用户

发布于 2014-01-24 22:14:27

您可以按照Jakub在此answer中的建议注册一个新的转换。使用Ember Data 1.0.beta.1,你必须像这样在应用程序上使用create a new transform

代码语言:javascript
复制
App.IsodateTransform = DS.Transform.extend({
  deserialize: function (serialized) {
    if (serialized) {
      return moment(serialized).toDate();
    }
    return serialized;
  },

  serialize: function (deserialized) {
    if (deserialized) {
      return moment(deserialized).toISOString();
    }
    return deserialized;
  }
});

如果不使用moment.js,您可以更改serializedeserialize定义。

票数 12
EN

Stack Overflow用户

发布于 2013-06-27 22:50:10

Ember-Rails解决方案:

我在一个ember-rails应用程序中使用ember-data 0.13 / ember.js 1.0.0.rc5。我发现我必须执行以下操作才能将javascript日期与rails日期进行匹配。

代码语言:javascript
复制
# Transforms Date to avoid miss-match with rails date
DS.JSONTransforms.isodate =
  deserialize: (serialized) ->
    if serialized
      date = new Date(serialized)
      offset = date.getTimezoneOffset()
      new Date(date.getTime()+offset*60000)
    else 
      null
    
  serialize: (date) ->
    if date then moment(date).format("YYYY-MM-DD") else null

*我正在使用moment.js进行序列化,但您自己做起来可能并不难。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15695809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档