1

Keen.io APIをラップするアダプターを作成しています。これまでのところ、プロジェクト リソースを正常に読み込むことができましたが、返されるオブジェクトは次のようになります。

{
  partners_url: "/3.0/projects/<ID>/partners",
  name: "Project Name",
  url: "/3.0/projects/<ID>",
  saved_queries: [ ],
  events_url: "/3.0/projects/<ID>/events",
  id: "<ID>",
  organization_id: "<ORG ID>",
  queries_url: "/3.0/projects/<ID>/queries",
  api_key: "<API KEY>",
  events: [
    {
      url: "/3.0/projects/<ID>/events/user_signup",
      name: "user_signup"
    },
    {
      url: "/3.0/projects/<ID>/events/user_converted",
      name: "user_converted"
    },
    {
      url: "/3.0/projects/<ID>/events/user_created_project",
      name: "user_created_project"
    }
  ]
}

多くの粗雑さを除いて、Ember は を使用してnameおよびid属性を問題なくマッピングできますが、モデルにリレーションRESTSerializerを追加すると、次のように爆発します。eventsProject

Error while loading route: TypeError: Cannot set property 'store' of undefined
    at Ember.Object.extend.modelFor (http://localhost:3000/assets/ember-data.js?body=1:9813:23)
    at Ember.Object.extend.recordForId (http://localhost:3000/assets/ember-data.js?body=1:9266:21)
    at deserializeRecordId (http://localhost:3000/assets/ember-data.js?body=1:10197:27)
    at deserializeRecordIds (http://localhost:3000/assets/ember-data.js?body=1:10211:9)
    at http://localhost:3000/assets/ember-data.js?body=1:10177:11
    at http://localhost:3000/assets/ember-data.js?body=1:8518:20
    at http://localhost:3000/assets/ember.js?body=1:3404:16
    at Object.OrderedSet.forEach (http://localhost:3000/assets/ember.js?body=1:3247:10)
    at Object.Map.forEach (http://localhost:3000/assets/ember.js?body=1:3402:10)
    at Function.Model.reopenClass.eachRelationship (http://localhost:3000/assets/ember-data.js?body=1:8517:42) 

私の調査によると、これは、親 ID がないためEvent、 a を aにマップする逆の関係が見つからないためと思われます。Project

これをサポートするために Ember Data で関係を作成することは可能ですか? projectIdまたは、ロードする前に各イベントにa を追加するようにシリアライザーを変更することは可能ですか?

私は Ember 1.5.0-beta.4 と Ember Data 1.0.0-beta.7+canary.f482da04 を使用しています。

4

1 に答える 1

1

Projectモデルが次のように設定されていると仮定します。

App.Project = DS.Model.extend({
  events: DS.hasMany('event');
});

API からの JSON が、Ember-Data が期待する特定の形式であることを確認する必要があります。

{
  "project": {
    "id": 1,
    "events": ["1", "2"],
  },

  "events": [{
    "id": "1",
    "name": "foo"
  }, {
    "id": "2",
    "name": "bar"
  }]
}

ただし、モデルのシリアライザーに実装extractArrayして、サーバーからの JSON を上記の例のようなものに変換することができます。

Ember docsに実際の例と説明があります。

于 2014-03-16T21:00:16.027 に答える