我一直在搞乱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
使用localstorage adapter。
这是事情中断的地方,日期没有保存到localstorage
,这是因为适配器中使用了toJSON
andserialize
方法。
具体来说,适配器会这样做:
_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
返回相同的东西。
所以 TLDR && 问题:
为什么这些方法toJSON
和serialize
我的设置date
为null,当它显然有一个值,并且那个值是一个字符串?