0

私はember.js todoMVCの例をいじっています。完了し、問題なく動作しましたが、さらに学習するために、変更を開始しました。

これからモデルを更新しました:

Todos.Todo = DS.Model.extend({
   title: DS.attr('string'),
   isCompleted: DS.attr('boolean'),
});

これに:

Todos.Todo = DS.Model.extend({
    title: DS.attr('string'),
    isCompleted: DS.attr('boolean'),
    date: DS.attr('date')
}); 

(私はember-dataも使用しています)。

日付を入力できるようにテンプレートに追加し、コントローラー アクションを次のように更新しましたcreateTodo

actions: {
    createTodo: function(){
        var title = this.get('newTitle');
        var date = this.get('newDate');     

        if(!title.trim()){
            return;
        }

        var todo = this.store.createRecord('todo',{
            date: date,
            title: title,
            isCompleted: false              
        });

        //this clears the input field value
        this.set('newTitle', '');
        this.set('newDate', '');

        //and save the instance of the model.
        todo.save();
    },
//...More code

すばらしい、すべてが機能するので、 localstorage adapterlocalstorageを使用して保存します。

ここで問題が発生し、日付が に保存されません。これは、アダプタで使用されているandメソッドがlocalstorage原因です。toJSONserialize

具体的には、アダプターはこれを行います。

    _addRecordToNamespace: function (namespace, record) {
            var data = record.serialize({includeId: true});
            namespace.records[data.id] = data;
    }

レコードの一部であるサブオブジェクトを取得_dataします。次のようになります。

//taken from the chrome inspector 
_data: Object
  __ember1386208719445_meta: Meta
  date: "12/11/2013"
  isCompleted: false
  title: "testing something"
  __proto__: Object

そして戻ります:

Object {title: "testing something", isCompleted: false, date: null}

toJSON同じものを返します。

SO TLDR && 質問:

明らかに値があり、その値が文字列である場合、メソッドtoJSONserializemy を null に設定するのはなぜですか?date

4

2 に答える 2

1

日付型だとおっしゃいましたが、文字列として設定していたため、emberデータがシリアル化しようとすると、日付が必要なため混乱し、null.

serialize: function(date) {
  if (date instanceof Date) {
    var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
    var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

    var pad = function(num) {
      return num < 10 ? "0"+num : ""+num;
    };

    var utcYear = date.getUTCFullYear(),
      utcMonth = date.getUTCMonth(),
      utcDayOfMonth = date.getUTCDate(),
      utcDay = date.getUTCDay(),
      utcHours = date.getUTCHours(),
      utcMinutes = date.getUTCMinutes(),
      utcSeconds = date.getUTCSeconds();


    var dayOfWeek = days[utcDay];
    var dayOfMonth = pad(utcDayOfMonth);
    var month = months[utcMonth];

    return dayOfWeek + ", " + dayOfMonth + " " + month + " " + utcYear + " " +
         pad(utcHours) + ":" + pad(utcMinutes) + ":" + pad(utcSeconds) + " GMT";
  } else {
    return null;
  }
}
于 2013-12-05T03:32:45.510 に答える
-1

日付形式が無効です。「12/11/2013」の代わりに「2013-02-07T16:44:57」を試してください。

于 2013-12-05T02:40:09.100 に答える