【发布时间】:2013-12-05 02:09:41
【问题描述】:
我一直在搞乱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 adapter 将其保存到localstorage。
这是问题所在,日期没有保存到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 返回相同的内容。
所以 TLDR && 问题:
为什么 toJSON 和 serialize 方法将我的 date 设置为 null,而它显然有一个值,并且该值是一个字符串?
【问题讨论】:
标签: javascript html ember.js ember-data to-json