代码之家  ›  专栏  ›  技术社区  ›  samuil

雅虎!已连接的电视播放事件

  •  2
  • samuil  · 技术社区  · 14 年前

    我想订阅 onTimeIndexChanged MediaPlayer事件。只要我订阅的视图保持焦点,它就可以正常工作。当我按下后退按钮或小部件按钮时,我的视图会变得模糊,不再接收事件。

    是否可以通过切换视图来保持此订阅?是否有小部件范围的订阅?

    我正在尝试找出是否可以计算客户端的播放时间。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Schmeeds    14 年前

    雅虎也对此作出了回应!已连接的电视论坛: http://developer.yahoo.net/forum/?showtopic=7383 是的,你走对了。媒体播放器是单件的,因此不受任何特定视图的约束。您可以在小部件的全局执行上下文中定义订阅它的侦听器。这样,您仍然可以接收和处理当视图是gc'd时发生的事件,并且仍然可以接收这些事件。

    我们将这些全局订阅放在init.js中,这样它们就位于中心位置(最佳实践)。

     
    EventHandlers.handlerPlayerEvent.subscribeTo(KONtx.mediaplayer, ['onStateChange', 'onTimeIndexChanged'], EventHandlers);
    

    然后,在javascript/core/eventhandlers.js中:

    
    var EventHandlers = {
    
    
        //snipped for brevity;
    
        handlerPlayerEvent: function(event) {
                switch(event.type) {
                        case 'onStateChange':
                                switch(event.payload.newState) {
                                        case KONtx.mediaplayer.constants.states.PLAY:
                                                if(!this._snippetAdded) {
                                                        KONtx.application.addViewConfig({ id: 'snippet-nowplaying',
    

    viewClass: VideoNowPlayingSnippetView }); this._snippetAdded = true; } break; case KONtx.mediaplayer.constants.states.UNKNOWN: case KONtx.mediaplayer.constants.states.ERROR: case KONtx.mediaplayer.constants.states.STOP: case KONtx.mediaplayer.constants.states.EOF: KONtx.application.removeView('snippet-nowplaying'); this._snippetAdded = false; break; } break;

                        case 'onTimeIndexChanged':
                                //do something interesting;
                                break;
                }
        }
    

    };

    我还应该补充一点,如果您订阅的是视图中的事件,那么在视图的HideView侦听器中也取消订阅这些事件是非常重要的。这可以防止内存泄漏和其他不良行为。