Javascript 在Ember.js中加载关联模型
我有相关的型号Javascript 在Ember.js中加载关联模型,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我有相关的型号轨道和里程碑,如下所示: 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'), titl
轨道
和里程碑
,如下所示:
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]
}
我的后端是一个关系数据库,我希望避免加入跟踪和里程碑,除非必要
因此,我的期望是,即使tracks端点返回的响应不包含任何里程碑数组,以下内容也应该向/tracks/1/millements
发出请求,并将获得的里程碑与相关的track关联起来
this.store.find('track', params.track_id).then(function(track) {
return track.get('milestones').then(function(milestones) {
return console.log(milestones);
});
});
上面的代码片段位于Route#model方法中
使用余烬数据实现这一点可行吗?如果没有,那么我可以使用其他的余烬持久性库吗?请不要建议直接使用
$.ajax
Ember Data的REST适配器大致遵循标准,基于URL和ID。听起来你想要的是基于URL的加载。请看中的一个示例。这将延迟加载记录和记录的ID。按照返回曲目JSON的方式,余烬数据将使用该方法并请求GET:/millements?IDs[]=1&IDs[]=2&IDs[]=3
如果您希望Ember数据改为请求GET:/tracks/1/里程碑
(使用该方法),则需要使用links
属性格式化tracks JSON,如下所示
{
"title": "My track",
"description": "lorem ipsum dolor sit amet",
"links": { "milestones": "/tracks/1/milestones" }
}