如何加载两款车型在灰烬数据一个JSON请求?(How do I load two models in

2019-08-03 03:55发布

采用Ember公司的数据和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]
        }
    }
}

......然而,恩贝尔数据仍然发送请求(使用findQuery)到我的服务器试图让业主JSON。

我有一个的jsfiddle设置一个演示了这里 。 要观看的问题发生,你需要去这个链接激活路由/模板:

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

我没有在我的目的适配器定义findQuery(),因为我不应该需要,为了得到我已经发送的数据,对吧?

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

Answer 1:

我做了以下(使用烬数据修订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()
});


Answer 2:

尝试使用embedded财产。

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


文章来源: How do I load two models in one JSON request in Ember-data?