在Flex4的Module中使用Alert

转载:http://apsay.com/?p=919

 

用flex4开发一网站后台,今天遇到一个问题,很诡异,写了个自定义上传图片的组件,用在模块里面,然后再加载主文件后,出现异常。于是试了试,直接把组件放在主文件,发现正常,并且模块里面的同一组件也好了。崩溃。

主文件去掉那个组件后,模块里的继续异常,反复折腾后,检查发现上传成功了,就是Alert的样式没有了,全部堆上顶上方中间。猜想可能是Alert的问题。

于是直接在模块中使用Alert测试,果然,样式出错,崩溃,搜索之,看到这个帖子
Flex4 Module中不能Alert?

在仔细阅读了flex4语言参考里面关于Alert,ApplicationDomain等相关内容后,按里面编程浪子的方法修改,有变化,Alert组件的半透明白色背景出现了,可是主体部分还是堆在上方,崩溃。

于是又试了jialong的方法,修改Alert.show的第四个参数parent:Sprite为Sprite(FlexGlobals.topLevelApplication),直接报错,没有FlexGlobals这个东西。

几乎放弃,看某篇文章,发现Alert.show的第四个参数用的this。修改试之,好了。喜极而泣。

发现如果去掉编程浪子那些东西,只是show加this,Alert主体正常,但是大背景没有,并且按钮颜色也不正常。

感谢qiushuli,编程浪子,jialong。同事帮搜英文,说是adobe说这就是个BUG。郁闷。

好了,给出我的代码,编程浪子用的是ModuleLoader,我的项目用的是IModuleInfo和ModuleManager,看手册发现ApplicationDomain.currentDomain都是加在load方法里面。

Main.mxml

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx"
      minWidth="955" minHeight="600"
      creationComplete="application1_creationCompleteHandler(event)">
 <fx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import mx.core.IVisualElement;
   import mx.events.FlexEvent;
   import mx.events.ModuleEvent;
   import mx.modules.IModuleInfo;
   import mx.modules.ModuleManager;
   
   import mx.managers.PopUpManager;
   private var pop:PopUpManager = new PopUpManager();
   private var info:IModuleInfo;
   private var welcome:IVisualElement;
   private function application1_creationCompleteHandler(event:FlexEvent):void
   {
    loadModule("WelcomeModule.swf");
   }
   private function loadModule(url:String):void
   {
    info = ModuleManager.getModule(url);
    info.addEventListener(ModuleEvent.READY, moduleEventHandler);          
    info.load(ApplicationDomain.currentDomain);
   }
   private function moduleEventHandler(event:ModuleEvent):void
   {
    welcome = info.factory.create() as IVisualElement;
    moduleContainer.addElement(welcome);     
    info.unload();
   }
  ]]>
 </fx:Script>
 <s:Group id="moduleContainer" x="0" y="0" /> 
</s:Application>

WelcomeModule.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009"
     xmlns:s="library://ns.adobe.com/flex/spark"
     xmlns:mx="library://ns.adobe.com/flex/mx"
     layout="absolute" width="400" height="300">
 <fx:Script>
  <![CDATA[
   import mx.controls.Alert;
   protected function openAlert_clickHandler(event:MouseEvent):void
   {
    Alert.show("成功", "模块使用Alert", Alert.OK, this);
   }
   
  ]]>
 </fx:Script>
 <s:Button id="openAlert" x="10" y="10" label="模块使用Alert" click="openAlert_clickHandler(event)"/>
</mx:Module>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值