• As 动态载入模块Bug【原创】


      昨天Flex项目升级,从3.5的SDK升级到4.0,中间出现不少问题,截止至现在刚刚解决最大的问题就是swf模块动态载入的问题。 

    3.5代码如下:

    //加载显示Widget
    private function loadWidget(id:Number, url:String, preload:String):void
    {
    info
    =ModuleManager.getModule(url);
    info.data
    ={id: id, preload: preload == "" ? url : preload};
    info.addEventListener(ModuleEvent.READY, widgetReadyHandler);
    info.load(
    );
    if (url != "")
    {
    this.cursorManager.setBusyCursor();
    }
    }

    之前代码一直这么写没问题,但是到4.0的SDK之后出现动态加载的模块样式无法使用,怀疑是样式管理器没有继承到子模块,于是使用new 的方式添加对象:

    var widget:GridWidget = new GridWidget();
    widgetBox.addChild(widget as DisplayObject);

    上面这种方式没有问题,果然和猜测的一样,奇怪的是3.5并没有这样的问题,4.0的BUG?

    无意中想到,既然样式管理器会丢失,难道没有载入指定样式的方法吗?答案是有的,在载入的时候可以指定相关参数

    //加载显示Widget
    private function loadWidget(id:Number, url:String, preload:String):void
    {
    info
    =ModuleManager.getModule(url);
    info.data
    ={id: id, preload: preload == "" ? url : preload};
    info.addEventListener(ModuleEvent.READY, widgetReadyHandler);
    info.load(
    null,null,null,FlexGlobals.topLevelApplication.systemManager);
    if (url != "")
    {
    this.cursorManager.setBusyCursor();
    }
    }

    注意红色代码,这里指定了moduleFactory:IFlexModuleFactory,方法的注释说明为:调用者的 moduleFactory。moduleFactory 的一个用途是确定已加载模块的父样式管理器

    至此终于解决 该问题!

     

  • 相关阅读:
    把你的名字刻到IE上
    C#格式化字符串
    CEO、COO、CFO、CTO、CIO
    Net通用分页(可以选择页码的显示,且有中英选择)
    laravelmiddleware中间件常用使用方法
    laravel路由组中namespace的的用法详解
    qq自己设定动态图像视屏
    laravel实现excel表的导入导出功能
    git创建远程分支并推送
    jquery如何用Ajax将信息遍历到界面上
  • 原文地址:https://www.cnblogs.com/myssh/p/1955202.html
Copyright © 2020-2023  润新知