Ember.js 当ember数据进行序列化时,修改日期格式的最佳方法是什么?
在我的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 余烬数据是否提供了一个钩子来更改通过网络
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;
}
}
});