flex DeferredInstanceFromFunction 使用

flex DeferredInstanceFromFunction

官网对这个类的介绍:

一个延迟实例工厂,它使用生成函数创建所需对象实例。应用程序使用 getInstance() 方法在首次需要对象实例时创建该实例,随后获取对该对象的引用。

api上这么说,看来这个是单例的。

我前一篇文章http://demojava.iteye.com/blog/1175758 上介绍了一个as中自定义组件的方法,和这个 DeferredInstanceFromFunction  有什么联系呢?笔者看源码发现关系了:

 

mx.core.DeferredInstanceFromFunction 实现了 ITransientDeferredInstance 接口 而ITransientDeferredInstance 接口继承了 IDeferredInstance 关系清楚了

官网对这个 类的介绍是:

ITransientDeferredInstance 接口扩展 IDeferredInstance,并可以使用户将延迟的实例工厂重置为其初始状态(通常这意味着释放对组件的任何已知引用,如将引用该实例的所属文档属性设置为 null)。如果所需的行为是当某个状态不再应用时破坏某个状态特定的元素,则 AddItems 状态覆盖会利用此附加的功能。Flex 编译器使用与 IDeferredInstance 相同的自动强操作规则。

【初始状态】我就不明白了参考一些方法: 

 

另请参见

mx.states.AddItems
mx.core.IDeferredInstance

不懂难道控制状态的?而这个 AddItems 是来之 mx.states.AddItems 看来想那么回事。。。

 

下面上代码说明他用途:

f4中自定义组件 Demo.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx"
		 creationComplete="creationCompleteHandler(event)">
	
	<fx:Script>
		<![CDATA[
			import mx.events.FlexEvent;
			import mx.states.AddItems;
			import mx.states.SetProperty;
			import mx.states.State;
			
			import spark.components.HGroup;
			import spark.layouts.VerticalAlign;
			private var _state2 :State=null;
			private var _group:HGroup=null;
			protected function creationCompleteHandler(event:FlexEvent):void
			{
				var _state1 :State = new State();
				_state1.name = "demo1";//状态1
				var _item       :AddItems = new AddItems();
				_item.itemsFactory = new DeferredInstanceFromFunction(createButtonGroup);//createuttonGroup 添加控件
				_state1.overrides.push(_item);
				
				 _state2 = new State();
				_state2.name = "demo2";状态2
				states.push(_state1, _state2);// 其中 states 是UIComponent 的属性
			}
			
			protected function createButtonGroup():HGroup
			{
				_group= new HGroup();
				_group.percentWidth = 100;
				_group.height = 50;
				_group.verticalAlign = VerticalAlign.MIDDLE;
				
				var _array       :Array = ["Button A", "Button B"];
				
				for(var i:int = 0; i < _array.length; ++i)
				{
					var _btn         :Button = new Button();
					_btn.name = "btn" + String(_array[i]);
					_btn.label = _array[i];
					_group.addElement(_btn);
				}
				
				return _group;                     
			}			
			
			protected function btn1_clickHandler(event:MouseEvent):void
			{
				currentState = "demo1";
			}
			
			protected function btn2_clickHandler(event:MouseEvent):void
			{
				currentState = "demo2";
			}
			
		]]>
	</fx:Script>
	
	<s:layout>
		<s:VerticalLayout />
	</s:layout>
	
	<s:states>
		<s:State name="normal"/>
	</s:states>

	<s:Button id="btn1" label="状态1"
			  click="btn1_clickHandler(event)" />
	<s:Button id="btn2" label="状态2"
			  click="btn2_clickHandler(event)" /> 
</s:Group>


 点击状态1 转换到状态1 点击状态2 切换到状态2

看来这样也是一种 状态切换的应用,效率高些罢了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值