2012-07-28 52 views
0

我學習過「當心Flex單元中的單件」 http://www.devahead.com/blog/2010/03/beware-of-singleton-in-flex-modules/ 很多資訊都告訴我不同​​的模塊有不同的內容,但在我的情況下卻不行! 爲什麼不同模塊使用相同的靜態對象? 我想使用模塊寬度單例,但它的工作像應用程序範圍內的單例。 有人可以幫助我如何使模塊單身人士。 短代碼是這樣的:如何在Flex的不同模塊中創建不同的單例,以創建相同的單例?

<s:Application> 
    <s:ModuleLoader id="A" creationComplete="loadAModule()"/>  
    <s:ModuleLoader id="B" creationComplete="loadBModule()"/>  

    </s:Application> 

    //-----------AModule 
    <s:Module> 
     var aITx:ITx=Tx.newInstant();//Tx extend ITX 
     tracc(aITx.instantId); 
     ... 
    </s:Module> 

    //-----------BModule 
    <s:Module> 
     var aITx:ITx=Tx.getInstance();//Tx extend ITX 
     tracc(aITx.instanceID); 
     ... 
    </s:Module> 


    //-----singleton class 
     public class Tx extends EventDispatcher implements ITx 
     { 
      public function Tx() 
      { 
       // Add listeners 
       addEventListeners(); 
      } 
      private static var instance:Tx; 
      public static function getInstance():Tx 
      { 
       if (!instance) 
       { 
        instance = new Tx(); 
        // Generate a random instance ID 
        instance._instanceID = Math.round(Math.random() * 100); 
        trace("create new itx id="+instance.instanceID); 
       }else{ 
        trace("use old itx id="+instance.instanceID); 
       } 

       return instance; 
      } 
      protected var _instanceID: Number = NaN; 

      public function get instanceID(): Number 
      { 
       return _instanceID; 
      } 

     } 

回答

0

我認爲你的問題是關係到模塊加載的情況下在你的情況我想所有的模塊被加載到相同的上下文。在一種情況下,一個類只有一個版本。因此,你的Singleton只有一個實例。如果你想有獨立的類,你必須將每個模塊加載到它自己的上下文中。看看這個鏈接,它解釋了上下文相當不錯:http://livedocs.adobe.com/flex/3/html/help.html?content=05_Display_Programming_33.html

+0

謝謝,我認爲你是對的。但我已經放棄使用單例,並重寫每一件事情。現在每件事都可以。 – user1559053 2012-08-17 00:36:08

相關問題