[英]Loading associated models in Ember.js
我有相关的模型Track
和Milestone
如下:
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
。
在返回轨道的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.