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: