加载和卸载模块
你可用来在你的Flex程序中加载和卸载模块的技巧包括使用ModuleLoader和ModuleManager。
 
使用ModuleLoader类加载模块
你可以使用ModuleLoader类在程序或其他模块中加载模块。在MXML中最简单的方式是通过使用<mx:ModuleLoader>标签。你设定url属性值来指出模块的SWF文件的位置。下面的例子在应用程序第一次启动时加载模块:
<!-- modules/MySimplestModuleLoader.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:ModuleLoader url="ColumnChartModule.swf"/>
</mx:Application>
你可以通过在其他时间,比如在一个事件的响应中设置url属性的值,来改变模块加载的时机。
 
为一个ModuleLoader设置目标URL将调用loadModule()方法。这个动作在你第一次通过设定url属性的方式创建一个ModuleLoader时发生,也会在你改变url属性的值的时候发生。
 
如果你将url属性的值设定为一个空字符串(""),ModuleLoader将卸载当前的模块。在一个程序中,你可以有多个ModuleLoader类的实例。下面的例子在用户将TabNavigator容器导航到恰当的卡片时加载模块:
 
<?xml version="1.0"?>
<!-- modules/URLModuleLoaderApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
        <mx:Panel
                title="Module Example"
                height="90%"
                width="90%"
                paddingTop="10"
                paddingLeft="10"
                paddingRight="10"
                paddingBottom="10"
        >
        
                <mx:Label width="100%" color="blue"
                        text="Select the tabs to change the panel."/>
            
                <mx:TabNavigator id="tn"
                        width="100%"
                        height="100%"
                        creationPolicy="auto"
                >
                
                        <mx:VBox id="vb1" label="Column Chart Module">
                                <mx:Label id="l1" text="ColumnChartModule.swf"/>
                             <mx:ModuleLoader url="ColumnChartModule.swf"/>
                        </mx:VBox>
                        
                        <mx:VBox id="vb2" label="Bar Chart Module">
                                <mx:Label id="l2" text="BarChartModule.swf"/>
                                <mx:ModuleLoader url="BarChartModule.swf"/>
                        </mx:VBox>
            
                </mx:TabNavigator>        
                
        </mx:Panel>
</mx:Application>
 
你也可以使用ModuleLoaderAPI的loadModule()和unloadModule()方法来加载和卸载模块。这些方法不需要参数,ModuleLoader加载和卸载匹配当前url属性值的模块。
 
下面的在你点击按钮时加载和卸载模块:
<?xml version="1.0"?>
<!-- modules/ASModuleLoaderApp.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
        <mx:Script>
        <![CDATA[
                import mx.modules.*;
                public function createModule(m:ModuleLoader, s:String):void {
                  if (!m.url) {
                    m.url = s;
                    return;
                  }
                 m.loadModule();
                }
                
                public function removeModule(m:ModuleLoader):void {
                  m.unloadModule();
                }
        ]]>
        </mx:Script>
        <mx:Panel title="Module Example"
                height="90%"
                width="90%"
                paddingTop="10"
                paddingLeft="10"
                paddingRight="10"
                paddingBottom="10"
        >

<mx:TabNavigator id="tn"
                        width="100%"
                        height="100%"
                        creationPolicy="auto"
                >

<mx:VBox id="vb1" label="Column Chart Module">
                                <mx:Button
                                        label="Load"
                                        click="createModule(chartModuleLoader, l1.text)"
                                />
                                
                                <mx:Button
                                        label="Unload"
                                        click="removeModule(chartModuleLoader)"
                                />
                                
                                <mx:Label id="l1" text="ColumnChartModule.swf"/>
                                
                                <mx:ModuleLoader id="chartModuleLoader"/>
                        </mx:VBox>
                        
                        <mx:VBox id="vb2" label="Form Module">
                                <mx:Button
                                        label="Load"
                                        click="createModule(formModuleLoader, l2.text)"
                                />
                                
                                <mx:Button
                                        label="Unload"
                                        click="removeModule(formModuleLoader)"
                                />
                                
                                <mx:Label id="l2" text="FormModule.swf"/>
                                
                                <mx:ModuleLoader id="formModuleLoader"/>
                        </mx:VBox>
    </mx:TabNavigator>
  </mx:Panel>
</mx:Application>

当你加载一个模块时,不管为模块调用多少次load()方法,Flex确保只有一个被加载的模块的拷贝。
 
当两个同名但实现不同的模块被加载时,第一个被加载的模块将被使用。这将导致运行时错误。这种情况通常在模块的拥有者定义了多个模块时发生。因为这些模块处于平行的程序域中,加载类定义的模块将首先使用那个类,而其他模块尝试使用那个类时将遭遇异常。解决方案是将类定义提升到主应用程序域中,这样所有的模块都可以使用那个类。

转载于:https://blog.51cto.com/flexria/158077

创建模块化程序(三)相关推荐

  1. 创建模块化程序(一)

    介绍 模块是可以被一个程序加载和卸载的SWF文件.模块不能独立于程序运行,但是可以在任意数量的程序间共享. 模块可以让你将程序分割成几个片段或单元.主程序或"壳",可以动态的加载其 ...

  2. 创建模块化程序(二)

    编译模块 编译模块的方式和编译程序相似.在命令行中,你可以使用mxmlc命令行编译器,如下所示: mxmlc MyModule.mxml 结果是将模块编译一个可以加载到程序中的SWF文件.你不能将基于 ...

  3. Prism学习笔记(三):对Prism中模块化程序的理解。

    这几天学习Prism,看了下帮组文档和程序.在Prism中专门讲解模块化程序开发的有俩个列子,一个是用Unity解耦实现Prism的依赖注入,另一个列子是用MEF解耦是实现Prism的依赖注入. 案例 ...

  4. 《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)

    创建ASP.NET Core Web应用程序 如果您使用的是VS2017请看 VS2017创建ASP.NET Core Web程序(三) 在这个视频中我们将讨论 可用的不同项目模板及其功能 预制的项目 ...

  5. TIA博途SCL入门学习(三)创建SCL程序及更改FB块接口的视图样式

    TIA博途SCL入门学习(三)创建SCL程序及更改FB块接口的视图样式 TIA博途中创建SCL程序有2种方式,具体可参考以下内容: 在LAD程序段或FBD程序段种可以插入SCL程序段,实现两种语言混合 ...

  6. JavaEE多线程基本概念 及 创建多线程程序的三种方式

    Hello! 大家好.(非常平庸的开场白 习惯一下).此篇博客是我的"处女作",因为是第一次写博客,在文章格式以及文章内容可能会有许多问题和缺陷.欢迎各位大神对我的文章进行指正!我 ...

  7. qt人员管理模块(模块化程序)功能块复制直接使用不冲突

    一.前言 qt对人员管理部分个人总结的模块化程序,直接按照步骤复制粘贴程序,直接实现人员管理功能,无需花费脑筋在理清各个思路,适合快速编写组装程序 二.环境 windows qt5.7 sqlite3 ...

  8. SAP入门技术分享四:模块化程序

    模块化程序 1.子程序概要 2.子程序定义 3.子程序参数 (1)传递参数的方法 (2)定义参数类型 (3)参数与结构体 (4)参数与内表 4.调用子程序 (1)调用程序内部子程序 (2)调用程序外部 ...

  9. java多线程w3c_Java创建多线程的三种方式

    前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...

  10. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    版权声明 请尊重原创作品.转载请保持文章完整性,并以超链接形式注明原始作者"tingsking18"和主站点地址,方便其他朋友提问和指正. QT源码解析(一) QT创建窗口程序.消 ...

最新文章

  1. android 游戏现状,年终总结:Android十款画面最强3D游戏
  2. JS高级 - 面向对象5(继承,引用)
  3. golang的time包:时间字符串和时间戳的相互转换
  4. 分段线性插值Python实现(同时估计误差)
  5. linux命令gen,Linux中msgen命令起什么作用呢?
  6. 使用requireJS的shim參数,完毕jquery插件的载入
  7. 《大数据》2021年第4期目次摘要
  8. 同前端联调过程中遇到的坑
  9. 【海洋女神原创】Installshield脚本拷贝文件常见问题汇总
  10. cocos2d-x使用python创建vs模板
  11. web 前端签名插件_10款前端开发神器,助你成前端高手?
  12. 远程桌面/远程登陆中强行登陆(他人退出)与切换回话(登陆后切换到上次别的登陆)3389...
  13. mysql 查询若干小时之内的数据
  14. 004. 看似“完美”的类目+属性
  15. 计算机网络中计算机资源管理器,计算机基础知识:资源管理器的使用
  16. oa处理会签流程图_关于合同会签OA流程使用说明
  17. 全网最完整php禁用eval函数讲解
  18. Xcode8使用出现bundleid: com.xxx.xxx, enable_level: 0, persist_level: 0, propagate_with_acti
  19. Matlab二维坐标下极坐标向直角坐标的转换
  20. Android StatusBar 更改

热门文章

  1. K3CLOUD表关联
  2. Java多线程和并发(一),进程与线程的区别
  3. linux 设置tomcat快捷启动方式
  4. NYOJ 822 画图
  5. cygwin中如何使用gcc
  6. PHP Cookbook读书笔记 – 第13章Web自动化
  7. 给自己一个没有退路的悬崖
  8. 游戏服务器mysql封装_游戏服务端之C++封装Mysql
  9. python画龙猫_微信小程序支付demo,后端使用python
  10. 400是什么错误_404、403、405、500 | 常见网页错误代码解析