【问题标题】:Ember.js ember-data render double nested hasMany relationshipEmber.js ember-data 渲染双嵌套 hasMany 关系
【发布时间】:2013-11-28 16:10:17
【问题描述】:

我正在尝试使用 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 没有被解析的原因是什么?

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    问题是我错误地指定了 Song 上的关系:

    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')
    });
    

    【讨论】:

      【解决方案2】:

      除非你有一个特殊的序列化器,或者旧版本的 Ember Data,否则你的 json 是错误的。

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

      应该是

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

      【讨论】:

      • 感谢您的回答。我试图将其更改为您的格式,但它不能解决问题。 emberjs.com/guides/models/the-rest-adapter/#toc_relationships这个文档过时了吗?
      • 更改为您的格式解决了我以前遇到的一些其他问题,例如 album.artist.title 以前无法正常工作 - 但它不能解决歌曲问题。
      猜你喜欢
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      相关资源
      最近更新 更多