2012-01-22 78 views
0

我似乎無法綁定到$ .jPlayer.event.error事件,但我可以綁定到其他事件。

我使用一個骨幹視圖控制jPlayer,和這裏的初始化函數:

initialize: function() { 
    _.bindAll(this, 'render', 'get_media_url', 'on_player_error', 
       'play', 'scrub', 'move_playhead', 'on_media_progress', 
       'on_player_ready', 'on_player_timeupdate', 'on_player_ended', 
       'set_progress_bar', 'set_current_time', 'time_from_percent'); 
    // set up jplayer and bind essential events to view methods, bound to the current object 
    $(this.player).jPlayer(this.player_defaults); 
    $(this.player).bind($.jPlayer.event.ready, _.bind(this.on_player_ready, this)); 
    $(this.player).bind($.jPlayer.event.timeupdate, _.bind(this.on_player_timeupdate, this)); 
    $(this.player).bind($.jPlayer.event.ended, _.bind(this.on_player_ended, this)); 
    $(this.player).bind($.jPlayer.event.progress, _.bind(this.on_media_progress, this)); 
    $(this.player).bind($.jPlayer.event.error, _.bind(this.on_player_error, this)); 
    this.current_state = this.PAUSED; 
}, 
on_media_progress: function(event){ 
    $('time#total').html($.jPlayer.convertTime(event.jPlayer.status.duration)); 
}, 

on_player_error: function(event){ 
    alert(event); 
}, 

(切斷由於簡潔的方式休息,但你會看到被定義的方法相同; on_media_progress火災沒有失敗on_player_error然而,NADA)

on_player_readyon_player_timeupdateon_player_endedon_media_progress所有消防正確!。

on_player_error,但是,永遠不會被調用。

我有隻被傳遞到setMedi一個的MP3,我沒有安裝Flash和我加載在Firefox 9.0.1的頁面,但

如果我在this.player_defaults對象設置errorsAlert: true ,jPlayer顯示它自己的錯誤對話框,但我的錯誤處理程序仍然不會觸發。

就像海盜隊長帶着輪子在褲子裏一樣,這是驅動我的堅果!

+0

你可以使用的jsfiddle,或者我們可以有一個鏈接到您正在測試的網站? – mowwwalker

+0

我可以做一個小提琴,但是我必須改變代碼來撕掉我們系統中綁定的部分。我會盡力在AM中完成。 – tkone

+0

好的,你看到我的答案了嗎?我有一種感覺,'$ .jPlayer.event.error'不是一個事件,而是一個具有特定錯誤事件的類。 – mowwwalker

回答

0

答案,這要歸功於jPlayer谷歌集團,得到的答覆是,你需要做的所有之前實例化jPlayer對象的結合 - - 一旦它被實例化,錯誤事件已經被觸發,所以你不能捕獲它!

所以,你需要這樣做:

$(this.player).bind($.jPlayer.event.ready, _.bind(this.on_player_ready, this)); 
$(this.player).bind($.jPlayer.event.timeupdate, _.bind(this.on_player_timeupdate, this)); 
$(this.player).bind($.jPlayer.event.ended, _.bind(this.on_player_ended, this)); 
$(this.player).bind($.jPlayer.event.progress, _.bind(this.on_media_progress, this)); 
$(this.player).bind($.jPlayer.event.error, _.bind(this.on_player_error, this)); 
$(this.player).jPlayer(this.player_defaults);