2015-04-04 49 views
-1

我正在使用Flash Builder 4.7並創建了一個工作程序類。以下是代碼:如何從AS3工作類訪問父變量或包裝變量

package co.fuix.mobile.system.model 
{ 
    import flash.display.DisplayObjectContainer; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.system.MessageChannel; 
    import flash.system.Worker; 
    import flash.utils.getDefinitionByName; 

    import mx.managers.SystemManager; 

    public class InstantMessengerWorker extends Sprite 
    { 

     private var bm:MessageChannel; 
     private var mb:MessageChannel; 
     public function InstantMessengerWorker() 
     { 

      super(); 

      bm = Worker.current.getSharedProperty("BACK_TO_MAIN_CHANNEL"); 
      mb = Worker.current.getSharedProperty("MAIN_TO_BACK_CHANNEL"); 
      mb.addEventListener(Event.CHANNEL_MESSAGE, onMainToBack); 

     } 

     protected function onMainToBack(event:Event):void 
     { 
      if(mb.messageAvailable){ 
       var s:SystemManager; 
       trace('*'+mb.receive()); 
       trace('**'+mb.receive()); 
       trace('***'+mb.receive()); 
       trace(mx.core.FlexGlobals.topLevelApplication.myVariable); 
      } 
     } 
    } 
} 

如何在主mxml文件中引用變量。我知道如何使用消息通道,但我想直接獲取該變量。

當我運行上面的代碼,這部分

trace(mx.core.FlexGlobals.topLevelApplication.myVariable); 

是給我的錯誤。

任何幫助將會絕對讚賞

+0

'「是給我一個錯誤」'有什麼錯誤? – Brian 2015-04-09 15:05:11

回答

0

您不能像這樣從主應用程序訪問變量。他們正在分開運行。你需要做的是:

Link to Adobe docs

+0

謝謝@ jason-reeves的回答。至少我現在知道它是如何工作的。那麼是否可以在主SWF中共享FlexGlobals.topLevelApplication,如'worker.setSharedProperty(「FlexGlobalsObject」,mx.core.FlexGlobals.topLevelApplication);'。然後在worker中,我想以flexGlobalsProperty = Worker.current.getSharedProperty(「FlexGlobalsObject」);'的形式訪問該屬性。基本上我想分享swf之間的FlexGlobals對象。 – Drmaposa 2015-04-10 14:55:25

+0

不,那不行。只有簡單的對象可以共享。基本上你有兩個不同的Flash播放器,通過消息通道或共享屬性來回傳送信息。這是無狀態的,不能看到其他引用......只能來回傳遞消息(除可共享的ByteArray外)。我給你的鏈接是處理與工作人員溝通的唯一途徑。 – 2015-04-10 18:14:07

+0

謝謝傑森。現在我明白了。只有我最近纔開始使用Workers。 ;) – Drmaposa 2015-04-11 09:15:19