ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 如何在Ember-data中的一个JSON请求中加载两个模型?

2019-07-04 02:32:15  阅读:194  来源: 互联网

标签:javascript ember-js handlebars-js ember-data


使用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设置,演示它here.要观察问题发生,你需要转到此链接来激活路由/模板:

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

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

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

解决方法:

我正在做以下(使用ember-data revision 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()
});

标签:javascript,ember-js,handlebars-js,ember-data
来源: https://codeday.me/bug/20190704/1372876.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有