簡體   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