Ember.js ember-data呈现双嵌套hasMany关系

时间:2013-11-28 16:10:17

标签: javascript rest ember.js ember-data has-many

我正在尝试使用ember数据构建一个小应用程序,我试图通过其专辑呈现艺术家的所有歌曲。

我的模特看起来像:

App.Artist = DS.Model.extend({
  name: DS.attr('string'),
  albums: DS.hasMany('album', {async:true})
});

App.Song = DS.Model.extend({
  title: DS.attr('string'),
  artist: DS.belongsTo('App.Artist'),
  album: DS.belongsTo('App.Album')
});

App.Album = DS.Model.extend({
  title: DS.attr('string'),
  cover_url: DS.attr('string'),
  artist: DS.belongsTo('artist'),
  songs: DS.hasMany('song', {async:true})
});

在模板中,我试图将其呈现为:

<script type='text/x-handlebars', data-template-name='artists'>
  {{#each artist in model}} 
    {{#linkTo 'artist' artist}}{{artist.name}}({{artist.albums.length}}){{/linkTo}}
   {{/each}}
   {{outlet}}
</script>

<script type='text/x-handlebars', data-template-name='albums'>
      {{#each album in albums}}
        <h3>{{album.title}}</h3>
        {{#each song in album.songs}}
          {{song.title}}
        {{/each}}
      {{/each}}
</script>

相册标题显示正确但歌曲标题未显示。 Ember向服务器发送加载专辑歌曲的请求,album.songs为DS.ManyArray:ember461

回复如下:

{
  songs: [
  {
   id: 8
   artist_id: 1,
   album_id: 5,
   title: "title"
  }
 ]
}

album.songs没有被重新调整的原因是什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

问题在于我错误地指定了宋的关系:

App.Song = DS.Model.extend({
  title: DS.attr('string'),
  artist: DS.belongsTo('App.Artist'),
  album: DS.belongsTo('App.Album')
});

变为:

App.Song = DS.Model.extend({
  title: DS.attr('string'),
  artist: DS.belongsTo('artist'),
  album: DS.belongsTo('album')
});

答案 1 :(得分:0)

除非您有特殊的序列化程序或旧版本的Ember Data,否则您的json是错误的。

{
  songs: [
  {
   id: 8
   artist_id: 1,
   album_id: 5,
   title: "title"
  }
 ]
}

应该是

{
  songs: [
  {
   id: 8
   artist: 1,
   album: 5,
   title: "title"
  }
 ]
}