Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 当ember数据进行序列化时,修改日期格式的最佳方法是什么?_Ember.js_Ember Data - Fatal编程技术网

Ember.js 当ember数据进行序列化时,修改日期格式的最佳方法是什么?

Ember.js 当ember数据进行序列化时,修改日期格式的最佳方法是什么?,ember.js,ember-data,Ember.js,Ember Data,在我的ember数据适配器中,我使用此行序列化我的模型 var data = record.serialize(); 但我注意到我的模特都是约会型的 App.Foo = DS.Model.extend({ start: DS.attr('date') }); 。。。将像这样的日期发布到我的RESTAPI 2013年3月2日星期六格林尼治标准时间22:15:00 但是我需要一些api更友好的东西,比如yyyy-mm-dd或mm/dd/yyyy 余烬数据是否提供了一个钩子来更改通过网络

在我的ember数据适配器中,我使用此行序列化我的模型

var data  = record.serialize();
但我注意到我的模特都是约会型的

App.Foo = DS.Model.extend({
    start: DS.attr('date')
});
。。。将像这样的日期发布到我的RESTAPI

2013年3月2日星期六格林尼治标准时间22:15:00

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

余烬数据是否提供了一个钩子来更改通过网络发送日期的方式

我假设不是,因为这是来自ember data rev 11中serialize方法的实际返回行

return dayOfWeek + ", " + dayOfMonth + " " + month + " " + utcYear + " " + pad(utcHours) + ":" + pad(utcMinutes) + ":" + pad(utcSeconds) + " GMT";
更新

我还打开了一个关于余烬数据的问题,以了解为什么选择这种格式作为开始


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

DS.RESTAdapter.registerTransform("isodate", {
  deserialize: function(serialized) {
    return serialized;
  },

  serialize: function(deserialized) {
    return deserialized;
  }
});
然后将其用作
start:DS.attr(“isodate”)
,当然还有序列化/反序列化的正确定义:)

Ember Rails解决方案: 我在一个ember rails应用程序中使用了ember数据0.13/ember.js 1.0.0.rc5。 我发现我必须执行以下操作来匹配javascript日期和rails日期

# 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

*我正在使用来进行序列化,但这可能不难自己完成。

您可以按照Jakub在本文中的建议注册一个新的转换。使用
Ember Data 1.0.beta.1
,您必须在应用程序上执行以下操作:

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的版本

取自


令人惊叹的!如果我想为两者调用“super”(重复使用ember数据已经对date执行的操作),我如何实现这一点,因为转换是“isodate”而不是“date”?此方法在ember data 1.0.beta.1即将编辑时被弃用,但决定使用注释可能更好。对于ember data 1.0.0.beta.6,我需要使用
App.IsodateTransform=DS.Transform.extend
而不是
DS.JSONTransforms.isodate
。我还使用了
DS.ActiveModelAdapter
适配器。@Beerlington编辑原始回复会更酷,因为它现在不工作。
  App.IsodateTransform = DS.Transform.extend({
    deserialize: function(serialized) {

      var type = typeof serialized;

      if (type === "string") {
        return new Date(Ember.Date.parse(serialized));
      } else if (type === "number") {
        return new Date(serialized);
      } else if (serialized === null || serialized === undefined) {
        // if the value is not present in the data,
        // return undefined, not null.
        return serialized;
      } else {
        return null;
      }
    },

    serialize: function(date) {
      if (date instanceof Date) {
        return date.toJSON();
      } else {
        return null;
      }
    }
  });