来自相关对象的EmberJS简单ID

时间:2014-05-08 13:46:40

标签: ember.js

有没有办法根据相关ID进行一些过滤?想象一下,我有2个模型,一个是歌曲模型,另一个是专辑模型,所以很明显这首歌有id的专辑,json将返回模型

{album: 1}

所以,如果我想过滤它,似乎我无法将相册ID与

相比较
song.get('album.id') === 1

有没有办法这么简单?

由于

编辑:模型

App.Album = DS.Model.extend({
   irrelevantstuff: DS.attr(),
   songs: DS.hasMany('Song')
})

App.Song = DS.Model.extend({
   irrelevantstuff: DS.attr(),
   album: DS.belongsTo('Album')
})

我尝试使用{async:true}并且没有,但仍然存在同样的问题。

然而我注意到,如果我第一次运行它,它会给我所有的相册都没有定义。但如果我第二次运行它,我会得到ID,现在我在商店里有所有东西,所以它&#39 ; s不是第一次或第二次做AJAX请求。

{"songs": [{"irrelevantstuff":"foo", "album": 1}, {"irrelevantstuff":"bar", "album": 1}]}

{"albums": [{"irrelevantstuff":"album", "songs": [1,2]}]

1 个答案:

答案 0 :(得分:1)

关系应该是camelCase

App.Album = DS.Model.extend({
   irrelevantstuff: DS.attr(),
   songs: DS.hasMany('song', {async: true})
})

App.Song = DS.Model.extend({
   irrelevantstuff: DS.attr(),
   album: DS.belongsTo('album', {async: true})
})

由于您的关系数据未在歌曲/专辑的请求中出现,因此将被视为异步。因此,如果你想访问它,你需要使用异步方法,承诺。

var songPromise = this.store.find('song', 1);

songPromise.then(function(song){
  var albumPromise = song.get('album');
  albumPromise.then(function(album){
    // the album is available for usage....
    if(album.get('id') == 1){
      alert('woo hoo');
    }
  });
});