Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Ember.js中加载关联模型_Javascript_Ember.js_Ember Data - Fatal编程技术网

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" }
}