Flex运用Module模块化编程时遇到的若干问题

 我们在Flex开发应用程序的时候,多多少少都会接触过Flex的模块化编程,模块化编程实际上指的就是将应用
从一个swf按模块分解成多个swf,而分解成为不同的swf势必就会用到Flex中的Module,本文将根据个人经验阐述在运用

Module模块化编程时需要注意的事项以及相关解决方案;

Environment: Flash Builder;Flex SDK4.1;IE7;
1.创建module时注意Module SWF size 的参数设置;

   如图我们创建Module1:


注意图中两个红色箭头,我们平常都会忽视这个选项,至少我最开始是忽视了;如果选"Optimize for application",意味着该Module1只能被TestMainModuel加载,其他的application
将无法加载Module1,生成的swf size 相对会小些;而如果选"Do not optimize",其他的applicaton也可以加载该swf,而swf size 会相对大些;

2.在module中使用PopUpManager popUp displayObject (以当前窗口为父容器)会报"PopUpManagerImpl中无法访问控对象引用或属性的错误":
错误截图:


解决方案:只需要在Application中导入PopUpManager并显示声明下,即添加如下code:
import mx.managers.PopUpManager;
private var pum:PopUpManager;

不信你you can try it,但是注意:一定要在的在Module中popup.
测试代码:

	//在module中弹出窗口以当前窗口为父容器
	private function popupWinBaseOnThis():void {
		var t:TitleWindow = new TitleWindow();
		PopUpManager.addPopUp(t,this as DisplayObject,true);
	}

3.在module中使用PopUpManager popUp displayObject (以主应用程序(根容器)为父容器)会报"Undefined stat 'inactive'"错误:

错误截图:

测试代码:

        //在module中弹出窗口以主应用程序(根容器)为父容器
	private function popUpWinBaseOnApp():void {
		var tw:TitleWindow = new TitleWindow();
		PopUpManager.addPopUp(tw,FlexGlobals.topLevelApplication as DisplayObject,true);
	}
解决方案:
(1). 在Application中导入PopUpManager并显示声明下,即添加如下code:
import mx.managers.PopUpManager;
private var pum:PopUpManager;

(2). 在popupwindow加上moduleFactory参数(该参数从Module中取得), code如下:
PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject,TitleWindow,false,null,Model1.moduleFactory));

ps:问题3,还可能出现的现象是"Error: Can not find the appearance of"或者弹出框里边的内容格式排版或者样式发生异常,只需要在后边加上一个moduleFactory的参数即可

4. module应用中容器中添加子控件,子控件再添加子控件时,顺序要注意:先将子控件添加到主容器中,再在子控件中添加child.否则回报skin找不到错误
这里贴出我项目中用到例子:

private function getHGView(isMax:Boolean=false,str:String=""):HGroup {
				var hg1:HGroup = new HGroup();
				this.addElement(hg1);
				var lb1:Label = new Label();
				if(isMax){
					lb1.text = "最大值:";
					maxInput = new DateInput();
					maxInput.dateStr = str;
					hg1.addElement(lb1);
					hg1.addElement(maxInput);
				}else{
				           lb1.text = "最小值:";
					minInput = new DateInput();
					minInput.dateStr = str;
					hg1.addElement(lb1);
					hg1.addElement(minInput);
				}
				return hg1;
			}
我本来想重现这个现象,unfortunately,经过一丝的努力后,我仍然没能让她重现,因此这一小点我觉得说服了还不够,仅供参考吧,倘若某天哥们你遇到类似问题时,不妨试试我这个写法。


如果有兴趣的话,我们一起来探究下发生这一系列情况的原因是什么吧?(跟帖讨论)


贴上测试代码吧:
Application:
<?xml version="1.0" encoding="utf-8"?>
<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">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.managers.PopUpManager;
			
			private var pum:PopUpManager;
			
			//optimized for application
			private function loadSwf():void {
				moduleLoad.unloadModule();
				moduleLoad.url = "module/Module1.swf";
				moduleLoad.loadModule();
			}
			
			//do not optimize
			private function loadSwf2():void {
				moduleLoad.unloadModule();
				moduleLoad.url = "module/SingleAppModule.swf";
				moduleLoad.loadModule();
			}
			
		]]>
	</fx:Script>
	<s:layout>
		<s:VerticalLayout verticalAlign="middle"/>
	</s:layout>
	<s:HGroup>
		<s:Button label="load 1 swf" click="loadSwf()" width="100" height="100"/>
		<s:Button label="load two swf" click="loadSwf2()" width="100" height="100"/>
	</s:HGroup>
	<mx:ModuleLoader id="moduleLoad" width="500" height="500" />
</s:Application>

Module:  

<?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="vertical" width="400" height="300">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import mx.core.FlexGlobals;
			import mx.managers.PopUpManager;
			
			import spark.components.Label;
			import spark.components.TitleWindow;
			import spark.components.VGroup;
			
			//在module中弹出窗口以当前窗口为父容器
			private function popupWinBaseOnThis():void {
				var t:TitleWindow = new TitleWindow();
				PopUpManager.addPopUp(t,this as DisplayObject,true);
			}
			
			//在module中弹出窗口以主应用程序(根容器)为父容器
			private function popUpWinBaseOnApp():void {
				//var tw:TitleWindow = new TitleWindow();
				//PopUpManager.addPopUp(tw,FlexGlobals.topLevelApplication as DisplayObject,true);
				
				//解决方案
				var tw:TitleWindow = TitleWindow(PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject,TitleWindow,false,null,this.moduleFactory));
			}
		]]>
	</fx:Script>
	<s:HGroup>
		<s:CheckBox  label="Module1"/>
		<s:Button  label="Module1"/>
		<s:Button label="pop up" click="popupWinBaseOnThis()" width="50" height="50"/>
		<s:Button label="pop up by Util" click="popUpWinBaseOnApp()" width="50" height="50"/>
	</s:HGroup>
</mx:Module>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IBM Flex刀箱交换模块是一种用于数据中心网络交换的刀片式交换设备。它是IBM Flex刀箱的重要组成部分,用于提供高速、可靠的数据传输和通信功能。 IBM Flex刀箱交换模块采用模块化设计,可以根据用户需求进行灵活搭配和配置。它通常包括交换机模块、电源模块、风扇模块等,这些模块均可以独立更换和升级,方便用户根据实际需要进行调整。 IBM Flex刀箱交换模块具有以下特点和功能: 1. 高带宽:采用多个高速接口,支持高达40GbE的数据传输速率,能够满足大规模数据中心的需求。 2. 高可靠性:采用冗余设计,支持模块级热插拔和冗余备份,一旦出现故障可以快速切换到备用模块,确保网络的可靠性和稳定性。 3. 灵活可扩展:支持多个交换模块的堆叠,实现端口数量的扩展,同可以根据用户需求进行模块的动态添加和移除。 4. 安全性强:具有完善的数据包过滤和安全认证功能,可以通过访问控制列表、虚拟局域网等方式提供全面的网络安全保护。 5. 管理便捷:提供了友好的图形化用户界面和命令行界面,支持远程管理和监控,方便管理员对刀箱交换模块进行配置、监测和故障排除。 总之,IBM Flex刀箱交换模块是一种高性能、可靠性强、可扩展性好、管理便捷的数据中心网络交换设备,能够满足复杂的数据传输需求,并提供安全可靠的网络通信环境。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值