我开始使用 Ember 数据,但无法映射数据
这是我的代码的一个示例(我已经将jsonTest作为从de backend接收的数据的一个示例,我不在后端上工作,并且我无法修改来自服务器的响应)
Clive = Ember.Application.create();
// MODEL
Clive.Deadline = DS.Model.extend({
title : DS.attr('string'),
});
jsonTest = '{"items":[{"id":93,"title":"title","date":"14-11-2012"}]}';
// Adapter
Clive.adapter = DS.Adapter.create({
findAll : function(store,type){
var self = this;
self.didFindAll(store, type, jsonTest);
}
});
Clive.store = DS.Store.create({
revision: 11,
adapter: 'Clive.adapter'
});
Clive.deadlineList = Clive.Deadline.find().get('items');
当我运行代码时,出现以下错误:
Uncaught Error: assertion failed: Your server returned a hash with the key 0 but you have no mapping for it
这是一个带有示例的jsfidlle:http://jsfiddle.net/gilles/6D5BC/
最佳答案
“服务器返回键0的哈希”是因为didFindAll()期望的是JavaScript对象而不是字符串。因此,尝试使用:
json = {"items":[{"id":93,"title":"title","date":"14-11-2012"}]};
// -> "Your server returned a hash with the key items but you have no mapping for it"
下一步是将对象转换为具有ember期望的命名约定。由于您的模型命名为Deadline,请使用以下命令:
jsonTransformed = '{"deadlines": [{"id":93,"title":"title 1","date":"14-11-2012"},{"id":94,"title":"title 2","date":"14-11-2012"}]}';
我添加了第二张唱片,但您明白了。最后,您需要更改
Clive.deadlineList
变量的设置方式:Clive.Deadline.find()
返回Clive.Deadline模型的集合,因此:Clive.deadlineList = Clive.Deadline.find()
console.log(Clive.deadlineList.getEach('title'));
// -> title1, title2
这是带有工作示例的更新的jsfiddle:
http://jsfiddle.net/mgrassotti/6D5BC/9/