繁体   English   中英

在Ember.js中加载关联的模型

[英]Loading associated models in Ember.js

我有相关的模型TrackMilestone如下:

App.Track = DS.Model.extend({
  title: DS.attr('string'),
  description: DS.attr('string'),
  milestones: DS.hasMany('milestone', {
    async: true
  })
});

App.Milestone = DS.Model.extend({
  track: DS.belongsTo('track'),
  title: DS.attr(),
  description: DS.attr(),
});

现在,我想延迟加载曲目的里程碑。 我相信Ember数据的默认期望是端点返回轨道返回的响应还包含一组里程碑ID,即。 就像是 :

GET: /tracks/1

{
    "title": "My track",
    "description": "lorem ipsum dolor sit amet",
    "milestones": [1,2,3]
}

我的后端是一个关系数据库,除非必要,否则我想避免加入轨迹和里程碑。

因此,我的期望是,即使track端点返回的响应不包含Milestones数组,下面的代码也应向/tracks/1/milestones发出请求,并将获得的Milestone与相关的Track相关联。

 this.store.find('track', params.track_id).then(function(track) {
  return track.get('milestones').then(function(milestones) {
    return console.log(milestones);
  });
});

上面的代码片段位于Route#model方法内部。

使用Ember Data完成此操作是否可行? 如果不是,那么我可以为Ember使用其他持久性库吗? 请不要建议直接使用$.ajax

Ember-Data的REST适配器大致遵循基于URL和ID的JSON API标准。 听起来您想要的是基于URL的加载。 看一下REST适配器文档中的示例。 这将延迟加载记录和记录的ID。

在返回轨道的JSON的方式中,Ember-Data将使用findMany方法并请求GET: /milestones?ids[]=1&ids[]=2&ids[]=3

如果要让Ember Data请求GET: /tracks/1/milestones (使用findHasMany方法),则需要使用类似links属性的格式设置轨道JSON格式

{
    "title": "My track",
    "description": "lorem ipsum dolor sit amet",
    "links": { "milestones": "/tracks/1/milestones" }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM