4

ember-data を使い始めましたが、データのマッピングに問題があります

ここに私のコードの例があります(バックエンドから受信したデータの例としてjsonTestを配置しました。バックエンドでは作業せず、サーバーからの応答を変更できません)

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/

4

2 に答える 2

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"

次のステップは、ember が期待する命名規則を持つようにオブジェクトを変換することです。モデルの名前は Deadline なので、次を使用します。

jsonTransformed = '{"deadlines": [{"id":93,"title":"title 1","date":"14-11-2012"},{"id":94,"title":"title 2","date":"14-11-2012"}]}';

2 番目のレコードを追加しましたが、おわかりいただけたでしょうか。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/

于 2013-01-04T17:03:38.837 に答える