在Flex的方法参数中,可以使用预先赋值的方式,所以在这样的方法中参数的数量就不固定,因此可以在组件中方法设置参数的时候使用Function.apply方法,代码如下:
<?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" xmlns:container="pizazz.flex4.container.*" minWidth="955" minHeight="600"> <s:layout> <s:VerticalLayout /> </s:layout> <fx:Script> <![CDATA[ import mx.containers.Form; import mx.containers.FormHeading; private function clikcHandler():void{ addElement(createForm("1", ["点击1", null, 200])); addElement(createForm("2", ["点击2"])); } private function createForm(label:String, button:Array):Form{ const _form:Form = new Form(); var _head:FormHeading = new FormHeading(); _head.label = label; var _btn:Button = buttonFactory.apply(null, button); _form.addElement(_head); _form.addElement(_btn); return _form; } public function buttonFactory(label:String, onClick:Function = null, width:Number = NaN, icon:Class = null, target:Button = null):Button{ if(!target){ target = new Button(); } if(onClick != null){ target.addEventListener(MouseEvent.CLICK, onClick); } if(icon != null){ target.setStyle("icon", icon); } target.setStyle("cornerRadius", 0); target.width = width; target.label = label; return target; } ]]> </fx:Script> <s:Button width="100" label="点击" click="clikcHandler()" /> </s:Application>
这样应用,组件方法实现就比较灵活了