问题:

自定义Flex组件,如果采用As方式,可以重写构造函数,使用时直接通过A a=new A(model);的方式使用。但是如果采用Mxml方式,无法重写构造函数,那么如何在new A()时传递参数呢?

 

解决方案:

 

引入set get方法,flex编译器在编译mxml=》as时,默认先设置属性,组件初始化时会先确保set 方法调用优先

例子代码:

 

Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" >   
  3.     <mx:Script>   
  4.         <![CDATA[   
  5.             import com.alibaba.process.bpm.model.HttpNodeModel;   
  6.                
  7.             private var _model:HttpNodeModel;   
  8.                
  9.             public function set model(model:HttpNodeModel){   
  10.                 _model=model;   
  11.             }   
  12.   
  13.             [Bindable]   
  14.             public function get model():HttpNodeModel{   
  15.                 return _model;   
  16.             }   
  17.                
  18.         ]]>   
  19.     </mx:Script>   
  20.         <mx:Form>   
  21.             <mx:FormItem label="url:">   
  22.                 <mx:TextInput text="{model.serviceModel.url}" width="200" height="20"/>   
  23.             </mx:FormItem>   
  24.         </mx:Form>   
  25. </mx:VBox>  
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" >
	<mx:Script>
		<![CDATA[
			import com.alibaba.process.bpm.model.HttpNodeModel;
			
			private var _model:HttpNodeModel;
			
			public function set model(model:HttpNodeModel){
				_model=model;
			}

			[Bindable]
			public function get model():HttpNodeModel{
				return _model;
			}
			
		]]>
	</mx:Script>
		<mx:Form>
			<mx:FormItem label="url:">
				<mx:TextInput text="{model.serviceModel.url}" width="200" height="20"/>
			</mx:FormItem>
		</mx:Form>
</mx:VBox>

 

使用这个组件传参数:

 

Java代码 复制代码 收藏代码
  1. var box:HttpNodeModelBox = new HttpNodeModelBox();   
  2.             box.model=new HttpNodeModel();   
  3.             addChild(box);  
posted on 2012-10-24 13:22  sagittar  阅读(115)  评论(0)    收藏  举报