swfobject callback
Sziasztok!
Van egy osztályom annak egy ref tulajdonsága valamint egy load és done metódusa.
A load metódus a swfobject.embedSWF metódusára támaszkodva betölt egy flash fájlt. Az embedSWF callback paraméterének a saját osztályom done metódusa van megadva, ahol szeretném az embedSWF által a callbacknek átadott paraméterből a ref tulajdonságot, a saját osztályom ref tulajdonságába menteni. A callbackben a this értéke azonban már a window objektum.Eddig úgy oldottam meg, hogy a saját osztályom példányát egy asszociatív tömbben (objectumban) a flash id-jével megegyező id-jű indexen eltároltam. Az embedSWF callback-jének megadtam egy külön függvényt, ami a kapott paraméter alapján (mivel abban szerepel a flash id-je is), kikereste a megfelelő példányt, meghívta a done metódusát, aminek paraméterül adta a ref-et.Működik csak körülményes, csúnya. Hogyan lehetne ezt úgy megoldani, hogy a saját osztályom done metódusa tudja lekezelni?
■ Van egy osztályom annak egy ref tulajdonsága valamint egy load és done metódusa.
A load metódus a swfobject.embedSWF metódusára támaszkodva betölt egy flash fájlt. Az embedSWF callback paraméterének a saját osztályom done metódusa van megadva, ahol szeretném az embedSWF által a callbacknek átadott paraméterből a ref tulajdonságot, a saját osztályom ref tulajdonságába menteni. A callbackben a this értéke azonban már a window objektum.
- var mf=function() {
- this.ref=null;
- }
- mf.prototype.done=function(result) {
- this.result=result; // undefined, mivel a this már a window itt
- }
- mf.prototype.load=function() {
- swfobject.embedSWF('x.swf','xmovie',200,200,'8.0.0',"",{},{},{},this.done)
- }
- var mfs={}
- function passref(result) {
- mfs[result.id].done(result.ref);
- }
- mfs['xmovie']=new mf();
- mf.load();
- // az mfben az embedSWF hívásánál nem this.done, hanem a passref lesz a callback paraméter
scope
Működik, köszi szépen. Ha jól
Closure / bind
this
értékét. Ezt meg lehet oldani closure-rel illetve bind-del, ami szintén closure-re épül, de nem minden böngészőben elérhető.Például: