在我的ember-data适配器中,我使用这一行来序列化我的模型
var data = record.serialize();
但我注意到我的模型有日期类型......
App.Foo = DS.Model.extend({
start: DS.attr('date')
});
...会将这样的日期发布到我的REST api
周六,2013年3月2日22:15:00 GMT
但我需要更友好的api友好的东西,比如yyyy-mm-dd或mm / dd / yyyy
ember-data是否提供了一个钩子来改变通过线路发送日期的方式?
我认为不是因为这是ember-data rev 11中serialize方法的实际返回行
return dayOfWeek + ", " + dayOfMonth + " " + month + " " + utcYear + " " + pad(utcHours) + ":" + pad(utcMinutes) + ":" + pad(utcSeconds) + " GMT";
更新
我还在ember-data上打开了一个问题,看看为什么选择这种格式
答案 0 :(得分:12)
您可以按照此answer中建议的Jakub注册新转换。使用Ember Data 1.0.beta.1
,您必须在应用上create a new transform,如下所示:
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,您可以更改serialize
和deserialize
定义。
答案 1 :(得分:8)
我在ember-rails应用中使用 ember-data 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
*我正在使用moment.js进行序列化,但这可能不是你自己难以做到的。
答案 2 :(得分:2)
不依赖于moment.js的版本
取自https://github.com/toranb/ember-data-django-rest-adapter/issues/26
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;
}
}
});