我正在尝试订阅onTimeIndexChanged
媒体播放器事件。只要我订阅的视图保持专注,它就可以正常工作。当我按下后退按钮或小部件按钮时,我的视图变得模糊并且不再接收事件。
此订阅是否可以通过切换视图持续存在?是否有小部件范围的订阅?
我试图找出是否可以计算播放客户端的时间。
我正在尝试订阅onTimeIndexChanged
媒体播放器事件。只要我订阅的视图保持专注,它就可以正常工作。当我按下后退按钮或小部件按钮时,我的视图变得模糊并且不再接收事件。
此订阅是否可以通过切换视图持续存在?是否有小部件范围的订阅?
我试图找出是否可以计算播放客户端的时间。
雅虎也回答了这个问题!联网电视论坛位于: 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 侦听器中取消订阅它们也非常重要。这可以防止内存泄漏和其他不良行为。