2014-01-12 45 views
3

我想實例化一個新的MediaElementPlayer對象。當它成功創建時,我想將整個對象傳遞給另一個函數(my_object.attachEvents)。我的代碼如下:Javascript執行順序:如何檢測對象創建

var options = { 
    success: function() { 
     //point 2 
     console.log("passing player object", local_player_instance); 
     my_main_object.attachEvents(local_player_instance);   
    } 
} 

//point 1 
console.log('player inited', local_player_instance); 
local_player_instance.video = new MediaElementPlayer('#video_player', options); 

my_main_object.attachEvents = function(local_player_instance) { 
    local_player_instance.video.play() 
} 

在Firefox中,在點2處的行調用attach事件方法之前,將執行點1處的分配。

在Chrome中,第2點首先被評估,結果當attach事件函數中的play方法被調用時,它不存在。

我的問題是,如何成功傳遞MediaElementPlayer傳遞給另一個函數創建時?

+0

是這裏面'DOMReady'事件? – Yang

+0

Like $(document).ready()?它在一個jQuery小部件中,所以我想是這樣。在這一點上,已經成功地致電dom了。 – Jim

+0

'success'函數沒有實例的參數嗎? – Bergi

回答

1

在一個跨瀏覽器的方式來處理這種情況的最好辦法是

// here's where you'll store a global reference to the player 
var globalMediaElement = null; 
var options = { 
    success: function (domNode, mediaElement) { 
     globalMediaElement = mediaElement; 

     doStuff(); 


     // you can also get the the player via jQuery here 
     $('#video_player').player 
    } 
} 

// create MediaElement 
new MediaElementPlayer('#video_player', options); 

function doStuff() { 
    globalMediaElement.play(); 
} 
+0

感謝您回覆此問題,但我完全確信這些作品都不是這樣。很長一段時間後,視頻進入$('#video_player')。player被設置爲undefined。 domNode和mediaElement都設置爲dom節點。這是因爲我使用舊的jQuery? – Jim

+0

我現在真的很瘋狂......整個代碼庫可以在這裏看到,以防它有任何幫助... https://github.com/jimmytidey/talking_jobs_skinned – Jim

+0

嗨@ john-dyer,我想知道如果我做錯了什麼,因爲$('#video_player')。player絕對不適合我? – Jim