20

私の ember-data アダプターでは、この行を使用してモデルをシリアル化します

var data  = record.serialize();

しかし、日付型のモデルに気付きました...

App.Foo = DS.Model.extend({
    start: DS.attr('date')
});

...このような日付をREST APIに投稿します

2013 年 3 月 2 日(土)22:15:00 GMT

しかし、yyyy-mm-dd や mm/dd/yyyy など、より API フレンドリーなものが必要です

ember-data は、日付がネットワーク経由で送信される方法を変更するためのフックを提供しますか?

これは ember-data rev 11 の serialize メソッドからの実際の戻り行であるため、そうではないと思います

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

アップデート

また、最初にこの形式が選択された理由を確認するために、ember-data に関する問題も開きました。

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

4

4 に答える 4

14

カスタムシリアライザー変換を登録できます

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

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

start: DS.attr("isodate")もちろん、シリアライズ/デシリアライズの適切な定義を使用して、それをとして使用するだけです:)

于 2013-03-29T01:43:43.610 に答える
8

Ember-Rails ソリューション:

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を使用していますが、自力で行うのは難しくないでしょう。

于 2013-06-27T14:50:10.440 に答える
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;
      }
    }
  });
于 2014-07-29T09:58:59.423 に答える