如何在Ember-Data上设置映射

Gil*_*s M 4 ember.js ember-data

我开始使用ember-data,我有一个映射数据的问题

这里是我的代码的例子(我把jsonTest作为从de后端接收的数据的例子,我不在后端工作,我不能修改服务器的响应)

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');
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我有这个错误:

Uncaught Error: assertion failed: Your server returned a hash with the key 0 but you have no mapping for it 
Run Code Online (Sandbox Code Playgroud)

这里有一个jsfidlle的例子:http://jsfiddle.net/gilles/6D5BC/

Mik*_*tti 5

"服务器返回带键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"
Run Code Online (Sandbox Code Playgroud)

下一步是将对象转换为具有ember期望的命名约定.由于您的模型名为Deadline,请使用以下命令:

jsonTransformed = '{"deadlines": [{"id":93,"title":"title 1","date":"14-11-2012"},{"id":94,"title":"title 2","date":"14-11-2012"}]}';
Run Code Online (Sandbox Code Playgroud)

我已经添加了第二条记录,但你明白了.最后,您需要更改Clive.deadlineList变量的设置方式:Clive.Deadline.find()返回Clive.Deadline模型的集合,所以只需:

Clive.deadlineList = Clive.Deadline.find()
console.log(Clive.deadlineList.getEach('title'));
// -> title1, title2
Run Code Online (Sandbox Code Playgroud)

这是一个更新的jsfiddle与工作示例:http: //jsfiddle.net/mgrassotti/6D5BC/9/