2

我正在尝试订阅onTimeIndexChanged媒体播放器事件。只要我订阅的视图保持专注,它就可以正常工作。当我按下后退按钮或小部件按钮时,我的视图变得模糊并且不再接收事件。

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

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

4

1 回答 1

2

雅虎也回答了这个问题!联网电视论坛位于: 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 侦听器中取消订阅它们也非常重要。这可以防止内存泄漏和其他不良行为。

于 2010-10-20T19:39:52.577 回答