2013-02-05 26 views
3

您好我有以下路线:余烬 - didLoad事件鉴于用于等待一个余烬的数据模型来加载

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

但是这也记录为空我怎么做到这一点?

+0

这可能是因为这个问题[#587](https://github.com/emberjs/data/issues/587)。如果是这样,解决方法可能是观察数组的长度。 –

+0

嗯,这可能与该错误有关。我也考虑过观察长度,但是每当我添加一个轨道时,我的逻辑就会被执行。我想要做的就是嵌入一个YouTube播放器播放播放列表中的歌曲。当然,我只需要嵌入一次该球员,并通过播放器API更改曲目。但我需要一个视频ID来嵌入播放器。这就是为什么我想要第一个轨道 –

回答

3

就像阿德里安在评论中说,似乎你遇到了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我会把这个逻辑控制器,而不是观点,但同样的想法。

+0

我不太确定它是否真的是这个错误,因为如果我看着萤火虫中的控制台,我看到ajax调用是在打印任何console.log调用之前完成的。因此它应该已经在那里? –

+0

好吧,我刚刚确认didLoad被调用之前,通过延迟5秒的请求完成ajax请求。它确实是错误。在萤火虫中,它只是在控制台开始时打印获取请求,而不是当它完成时。 –

+0

有关解决方法:如果我重新排列播放列表中的曲目以便第一个曲目发生更改,也会调用此方法。还有什么想法? –