【问题标题】:Issues with binding to $.jPlayer.event.error绑定到 $.jPlayer.event.error 的问题
【发布时间】: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_readyon_player_timeupdateon_player_endedon_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


【解决方案1】:

【讨论】:

【解决方案2】:

答案,感谢 jPlayer Google Group,答案是您需要在实例化 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2012-04-28
    • 1970-01-01
    • 2021-11-03
    • 2012-06-01
    • 1970-01-01
    相关资源
    最近更新 更多