Я уже возился с примером ember.js todoMVC. Сделал это и отлично работал, но, чтобы узнать больше, я начал его модифицировать.Использование toJSON в записи ember.js, устанавливает один из атрибутов на нуль
Я обновил модель от этого:
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')
});
(я использую уголек-данных, а).
Добавлено в шаблон, чтобы иметь возможность ввести дату, а затем обновили действие контроллера для 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
используя localstorage adapter ,
Это место, где вещи разрушаются, дата не сохраняется до localstorage
, а также из-за методов toJSON
и serialize
, которые используются в адаптере.
В частности, адаптер делает это:
_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 & & Вопрос:
Почему методы toJSON
и serialize
установить мой date
к нулю, когда она явно имеет значение, и это значение является строкой?
Формат не имеет значения. Это строка. Но ради тщательности я попробовал то, что вы предложили, и это не устранило проблему. – Ryan
Да, это строка, но ваш DS.attr указывает ее как дату, поэтому он ожидает определенный формат. Попробуйте изменить мой ответ. – chopper
Это хорошо знать о DS.attr, но я не думаю, что это проблема. Если я посмотрю на запись в инспекторе ember, там будет дата, только когда я обновляю страницу, и она должна извлечь запись из адаптера, что дата больше не существует. И я могу повторить ошибку, назначив запись объекту окна, а затем в инспекторе хрома, вызывающем 'serialize()' или 'toJSON()' на нем. – Ryan