如何在ember-data中的Fixture适配器中获取hasMany关系的List

时间:2014-08-15 07:25:48

标签: ember.js ember-data

我是新手。我有两个模特..

Music.Artist = DS.Model.extend({
    name: DS.attr('string'),
    dob : DS.attr('date'),
    songs : DS.hasMany('song',{async:true})
});

Music.Artist.FIXTURES=[
    {
        id:1,
        name:'John',
        dob:new Date(),
        songs:['1','2']
    },
    {
        id:2,
        name:'Robbin',
        dob:new Date(),
        songs:['1','2']
    }
];

Music.Song = DS.Model.extend({
    title:DS.attr('string'),
    artists:DS.hasMany('artist',{async:true})
});

Music.Song.FIXTURES = [
    {
        id:1,
        title:'A day to remember',
        artists:[1,2]
    },
    {
        id:2,
        title:'Cant live without you',
        artists:[1,2]
    }
];

我想要网址" / songs / id" ...我收到所有拥有给定身份的艺术家的歌曲。

Music.Router.map(function(){
    this.resource('songs',{path:'/songs/:id'});
});

Music.SongsRoute = Ember.Route.extend({
    model:function(param){
        var artist = this.store.find('artist',param.id);

        return artist.get('songs');
    }   

});

但它返回undefined ...如何获取与艺术家相关的歌曲列表。

有什么方法可以通过仅使用路线来实现这一点。

如何通过get获取如何阅读歌曲数组。

1 个答案:

答案 0 :(得分:1)

基于当前版本的Ember(1.6.1)和Ember-Data(1.0.0-beta.9),以下是我的示例如何工作。我改变了你的路线命名,我想你真的想要/artists/:artist_id之类的东西,它会列出艺术家的数据,包括他的所有歌曲。

您的ArtistSong模型声明似乎没问题,但我声明了这样的灯具:

Music.Artist.reopenClass({
  FIXTURES: [
    {
      id:1,
      name:'John',
      dob:new Date(),
      songs:['1','2']
    },
    {
      id:2,
      name:'Robbin',
      dob:new Date(),
      songs:['1','2']
    }
  ]
});

Music.Song.reopenClass({
  FIXTURES: [
    {
      id:1,
      title:'A day to remember',
      artists:[1,2]
    },
    {
      id:2,
      title:'Cant live without you',
      artists:[1,2]
    }  
  ]
});

对于路由器:

Music.Router.map(function() {
  this.resource('artists');
  this.resource('artist', { path: '/artists/:artist_id' });
});

路线:

var Music.ArtistsRoute = Ember.Route.extend({
  model: function() {
    return this.store.find('artist');
  }
});

var Music.ArtistRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('artist', params["artist_id"]);
  }
});

对于您的模板:

// artists.hbs
<ul>
{{#each}}
  <li>{{#link-to 'artist' this}}{{name}}{{/link-to}}</li>
{{/each}}  
</ul>

// artist.hbs
<h1>{{name}}</h1>
<hr>
<h2>Songs</h2>
<ul>
  {{#each songs}}
    <li>{{title}}</li>
  {{/each}}  
</ul>

希望这有帮助!