2013-02-05 100 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

有關解決方法:如果我重新排列播放列表中的曲目以便第一個曲目發生更改,也會調用此方法。還有什麼想法? –