Flex module 弹出窗问题

 

 

代码:



  1. <?xml version="1.0" encoding="utf-8"?>  
     
  2.   
     
  3. <mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009"   
     
  4.   
     
  5.                    xmlns:s="library://ns.adobe.com/flex/spark"   
     
  6.   
     
  7.                    xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="400" height="300">  
     
  8.   
     
  9.         <fx:Declarations>  
     
  10.   
     
  11.                 <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
     
  12.   
     
  13.         </fx:Declarations>  
     
  14.   
     
  15.         <fx:Script>  
     
  16.   
     
  17.                 <!--[CDATA[  
     
  18.   
     
  19.                         import mx.controls.Alert;  
     
  20.   
     
  21.                         private function init():void  
     
  22.   
     
  23.                         {  
     
  24.   
     
  25.                                 Alert.show(this.parentApplication.test,"你",Alert.OK,this);  
     
  26.   
     
  27.                         }  
     
  28.   
     
  29.                 ]]-->  
     
  30.   
     
  31.         </fx:Script>  
     
  32.   
     
  33.         <s:Button x="60" y="48" label="按钮" click="init();"/>  
     
  34.   
     
  35. </mx:Module> 
     

出错信息:



  1. TypeError: Error #1009: 无法访问空对象引用的属性或方法。  
     
  2.   
     
  3.         at mx.managers::PopUpManagerImpl/http://www.adobe.com/2006/flex/mx/internal::createModalWindow()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\PopUpManagerImpl.as:686]  
     
  4.   
     
  5.         at mx.managers::PopUpManagerImpl/addPopUp()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\PopUpManagerImpl.as:401]  
     
  6.   
     
  7.         at mx.managers::PopUpManager$/addPopUp()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\PopUpManager.as:193]  
     
  8.   
     
  9.         at mx.controls::Alert$/show()[E:\dev\4.x\frameworks\projects\framework\src\mx\controls\Alert.as:618]  
     
  10.   
     
  11.         at com.pilihou.modules::Test/init()[E:\study\TryModule\src\com\pilihou\modules\Test.mxml:13]  
     
  12.   
     
  13.         at com.pilihou.modules::Test/___Test_Button1_click()[E:\study\TryModule\src\com\pilihou\modules\Test.mxml:17] 


     

错误修改方案:


Module 


 


通常将模块载入一个子域,那么模块里面的类定义都不是application域的。比如第一个模块载入了类PopUpManager,那么整合 Application中,它就成了PopUpManager的拥有者,因为像这种manager都是单例的,如果另外一个模块稍后要使用这个 PopUpManager,就会引发运行时异常。


 


解决办法就是确保这些managers,比如PopUpManager and DragManager或者其他一些共享的服务 是在application中定义的,这样就能确保所有模块都能够使用。在main Application中: 


 



Java代码

 


  1. import mx.managers.PopUpManager;   
     
  2.   
     
  3. import mx.managers.DragManager;   
     
  4.   
     
  5. private var popUpManager:PopUpManager;   
     
  6. private var dragManager:DragManager;