【发布时间】:2012-01-22 23:52:30
【问题描述】:
我似乎无法绑定到$.jPlayer.event.error 事件,但我可以绑定到其他事件。
我正在使用 Backbone 视图来控制 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_ready、on_player_timeupdate、on_player_ended 和 on_media_progress 都可以正确触发。
但是,on_player_error 永远不会被调用。
我只有一个 MP3 被传递到 setMedia,我没有安装 Flash,我正在 Firefox 9.0.1 上加载页面,但是
如果我在this.player_defaults 对象中设置errorsAlert: true,jPlayer 会显示它自己的错误对话框,但我的错误处理程序仍然不会触发。
【问题讨论】:
-
您可以使用 jsfiddle,或者我们可以提供您正在测试的网站的链接吗?
-
我可以做一个小提琴,但我必须更改代码以删除与它相关的系统部分。我会尽量在上午完成这项工作。
-
好的,你看到我的回答了吗?我有一种感觉
$.jPlayer.event.error不是一个事件,而是一个包含特定错误事件的类。 -
您是否有任何理由没有通过 jPlayer 构造函数传递您的事件处理程序(例如 Ready、Play、Ended 等)? Backbone 公约对此不满意吗?
-
我需要将它们绑定到主干视图,当我通过 default_options 对象像
error: _.bind(this.on_player_error, this)一样传递它们时,这似乎不起作用。问题是相信“this”指的是 default_options 对象,而不是父视图。我想我可以试试_.extend(this.player_defaults, this),但重点是上面的代码应该工作,对吧?
标签: javascript jquery jquery-events jplayer