ember - didLoad事件,用于等待加载的ember-data模型

时间:2013-02-05 13:14:26

标签: ember.js ember-data

您好我有以下路线:

MB3.PlaylistRoute = Ember.Route.extend({
  model: function(params) {
    return MB3.Playlist.find(params.playlist_id);
  }
});

播放列表中包含有轨道的hasMany实现。在播放列表视图中,我想用播放列表的第一首曲目的属性做一些逻辑。

所以我添加了这段代码:

MB3.PlaylistView = Ember.View.extend({
  didInsertElement: function() {
    console.log(this.get("controller.tracks").objectAt(0).get("title"));
  }
});

问题是标题是未定义的(我认为因为它尚未加载。我尝试的第二件事是等待didLoad事件:

MB3.PlaylistView = Ember.View.extend({
      didInsertElement: function() {
        var self=this;
        this.get("controller.tracks").on("didLoad", function() {
          console.log(self.get("controller.tracks").objectAt(0).get("title"));
        });
      }
    });

但是这也记录为null。我如何实现这一目标?

1 个答案:

答案 0 :(得分:3)

就像Adrien在评论中所说,似乎你遇到了issue 587。也就是说,在这种情况下,我认为你实际上并不需要“didLoad”回调。相反,尝试使用计算属性来获取video_id或曲目标题。例如:

MB3.PlaylistView = Ember.View.extend({
  firstTrackTitle: function() {
    return this.get('controller.tracks.firstObject.title');
  }.property('controller.tracks.firstObject.title')      
});

然后在您的模板中,如果定义了此属性,则嵌入播放器:

{{#if view.firstTrackTitle}}
    embed code here
{{/if}}

FWIW我会把这个逻辑放在控制器而不是视图中,但同样的想法。