4

使用 Ember-data 和 Ember.js,我试图用一个 JSON 请求加载两个模型。这些模型具有类似于此的关系:

App.Person = DS.Model.extend({
    name:  DS.attr('string'),
    dogs:  DS.hasMany('App.Dog'),
});

App.Dog = DS.Model.extend({
    name:  DS.attr('string'),
    owner: DS.belongsTo('App.Person'),
});

我的服务器正在发送这样的 JSON:

{
    "dog": {
        "id": 1,
        "name": "Fido",
        "owner": {
            "id": 1,
            "name": "John Smith",
            "dogs": [1]
        }
    }
}

…然而,Ember-data 仍然向我的服务器发送一个请求(使用 findQuery),试图获取所有者 JSON。

我有一个 jsFiddle 设置,在这里演示它。要观察问题的发生,您需要转到此链接以激活路线/模板:

http://fiddle.jshell.net/6kQ8s/2/show/#/dog/1

我没有故意在我的适配器中定义 findQuery() 因为我不应该需要它来获取我已经发送的数据……对吗?

有谁知道我在这里做错了什么?

4

2 回答 2

2

我正在执行以下操作(使用 ember-data 修订版 8)

App.Dog = DS.Model.extend({
    name:  DS.attr('string'),
    owner: DS.belongsTo('App.Person', { embedded: true }),
});

此外,我必须告诉序列化程序加载此关系的映射。虽然不是必需的,但我使用的是我自己的 DS.Serializer 子类。在初始化时,序列化程序会加载 Person 类的映射,该映射指定应加载嵌入的关系。

  App.WOSerializer = DS.Serializer.extend({
    init: function(){
      this._super();
      this.map(App.Dog, {
        person: {
          embedded: 'load'
        }
      });
  });

由提问者编辑:

需要在适配器中初始化序列化程序。

App.adapter = DS.Adapter.create({
    // ...
    serializer: App.WOSerializer.create()
});
于 2012-11-25T14:19:49.063 回答
0

尝试使用embedded属性。

App.Dog = DS.Model.extend({
    name:  DS.attr('string'),
    owner: DS.belongsTo('App.Person', { embedded: true }),
});
于 2012-11-24T13:35:27.593 回答