2013-05-02 16 views
8

Sto usando JWPlayer. Dopo l'installazione il giocatore ho bisogno di aggiungere gli ascoltatori ad alcuni eventi, per fare un esempio ascolto events.JWPLAYER_MEDIA_TIME in questo modo:Come rimuovere un gestore di eventi dall'istanza di JWPlayer?

jwplayer('video-container').onTime(this.onTimeHandler); 

Dopo un po 'ho bisogno di rimuovere questo listener di eventi, leggendo la documentation non potevo' trovare una soluzione.

+0

hai provato 'jwplayer ('video-contenitore'). OnTime (null);' ?? – yogi

+0

hi @yogi, non funziona. 'Jwplayer.onTime()' sta vincolando una funzione a un evento, non riesco a trovare un modo per rimuovere questo binding ... –

risposta

8

Looking at the code, non sembra possibile rimuovere un listener di eventi: una richiamata viene spinto in un array quando si chiama onTime (o uno qualsiasi degli altri metodi per i gestori di eventi di configurazione), quindi chiamare una seconda volta doesn' t sovrascrive un listener precedente ma aggiunge semplicemente un nuovo listener all'array.

Forse un'alternativa potrebbe essere quella di impostare un flag volta il vostro ascoltatore non deve svolgere più il suo compito:

onTimeHandler : function() { 
    if (! this.handleOnTimeEvents) 
    return; 
    ... 
} 
+0

Grazie @robertklep, questo è quello che sto facendo atm, ma avevo bisogno di trovare un modo per rimuovere completamente il listener, non sembra carino se si aggiungono più listener in onTime (che sono chiamati circa 10 volte al secondo) e continuano ad aggiungere flag globali che impediranno l'esecuzione del codice. Come detto 'it_works! = Is_pretty';) (votato per l'enfort di dare una soluzione funzionante) –

0

Ecco come ho gestito esso. crea una pseudo-funzione il cui unico scopo è quello di essere un puntatore. Ero preoccupato con l'evento onComplete, così ho scritto il codice in questo modo qui di seguito:

function createJWPlayer(surl, stitle, autos, pw, ph) { 
    jwplayer("videocontainer").setup({ 
     file: surl, 
     title: stitle, 
     width: pw, 
     height: ph, 
     autostart: autos, 
     stretching: "uniform", 
     skin: "/Scripts/JWPlayer/six.xml" 
    }); 
    jwplayer().onComplete(function (e) { 
      jwcompleteevent(e); 
     }); 
} 

function jwcompleteevent(e) { 
    // method to remain empty, sole purpose is to provide a pointer for the handler 
} 

Poi nella funzione, dove ho creato, ho scritto questo:

var mcomplete = (selobj.HasQ == false) ? InterActNoTimeAutoS : jwpCompleteInterA; 
createJWPlayer(selobj.Upath, ti.TestTitle, true, "100%", "100%"); 
jwcompleteevent = mcomplete; 

Se avevo bisogno di caricare un altro video, farei questo

mcomplete = (selobj.HasQ == false) ? InterActNoTimeAutoS : jwpCompleteInterA; 
jwcompleteevent = mcomplete; 
loadJwPlayerUrl(selobj.Upath, true); 

Se uno vede un problema con questo, mi dica, che sembra funzionare come necessario nell'ambiente di sviluppo