3

嗨,我有以下路线:

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

但这也记录为空。我如何做到这一点?

4

1 回答 1

3

就像 Adrien 在评论中所说的那样,您似乎遇到了问题 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我会把这个逻辑放在控制器而不是视图中,但同样的想法。

于 2013-02-05T13:58:18.557 回答