2009-07-03 11 views
0

私は複数の非同期air.URLLoaderオブジェクトを使用していますが、イベントを発生させてurlloaderの "myId"を認識したいと思います。 私がダウンロードしているオブジェクトにはids自体がありますので、イベントリスナーのコールバック関数で、ダウンロードIDにprogress/finished/errorイベントが来たことを知りたいと思います。AIRのjavascriptクラスの拡張 - air.URLLoaderと静的イベント

コード:

# loader 
addonLoader = new air.URLLoader(); 
//addonLoader.myId = my_id; <- does not work: 
    // error: Failed: Error #1056: Cannot create property my_id on flash.net.URLLoader. 
addonLoader.dataFormat = air.URLLoaderDataFormat.BINARY; 
addonLoader.addEventListener(air.IOErrorEvent.IO_ERROR, myDownloadListenerError); 
addonLoader.addEventListener(air.ProgressEvent.PROGRESS, myDownloadListenerProgress); 
addonLoader.addEventListener(air.Event.COMPLETE, myDownloadListenerFinished); 
addonLoader.load(addonRequest); 

# listener callback 
function myDownloadListenerFinished(event) 
{ 
    air.trace('finished: '+event.target.myId); 
     // i need the addonLoader.myId here 
     // i have access to the caller, but i cannot add my own property/value to it 
    air.Introspector.Console.dump(event); 
} 

addEventListenerをコールバック関数は、フレームワークごとにパラメータとしてだけイベントに制限されています。イベントは大気からも来て、私はそれらを変更する方法を知らない(myIdを注入する)。

また、jQuery.extend()をair.URLLoaderの単純な値/ getter/setterオブジェクトで試しましたが、成功しませんでした。

イベントダンプ:

{ 
    bubbles=false 
    bytesLoaded=262144 
    bytesTotal=10933705 
    cancelable=false 
    clone=[function] 
    { 
     length=0 
    } 
    currentTarget=[object URLLoader] 
    { 
     addEventListener=[function] 
     bytesLoaded=262144 
     bytesTotal=10933705 
     close=[function] 
     data=undefined 
     dataFormat=binary 
     dispatchEvent=[function] 
     hasEventListener=[function] 
     load=[function] 
     removeEventListener=[function] 
     toString=[function] 
     willTrigger=[function] 
    } 
    eventPhase=2 
    formatToString=[function] 
    { 
     length=1 
    } 
    isDefaultPrevented=[function] 
    { 
     length=0 
    } 
    preventDefault=[function] 
    { 
     length=0 
    } 
    stopImmediatePropagation=[function] 
    { 
     length=0 
    } 
    stopPropagation=[function] 
    { 
     length=0 
    } 
    target=[object URLLoader] 
    { 
     addEventListener=[function] 
     bytesLoaded=262144 
     bytesTotal=10933705 
     close=[function] 
     data=undefined 
     dataFormat=binary 
     dispatchEvent=[function] 
     hasEventListener=[function] 
     load=[function] 
     removeEventListener=[function] 
     toString=[function] 
     willTrigger=[function] 
    } 
    toString=[function] 
    { 
     length=0 
    } 
    type=progress 
} 

答えて

0

いくつかの研究の後には、AIRクラスは、ちょうどあなたがどのような方法でそれらを拡張できないだろうと思われます。

この問題は、非同期部分を犠牲にしてキューを使用して解決しました。帯域幅が分割される前にダウンロードするために、これは悪くないはずです。

関連する問題