flex 权限控制
最近在看 <Flex企业开发应用实战>,前面就讲到了如何在flex中做权限控制,在此记录一下。 权限控制在Flex中,所有的ActionScript类可以根据是否可视分为两类:可视化组件和不可视组件。可视化组件都从mx.core.UICmponent继承,用于完成与用户的交互,不可视组件主要用来完成一些与人机交互无关的工作,大多数与数据处理相关,比如数据校验、格式化、远程数据访问等。 不可视化组件实现mx.core.IMXMLObject接口,就可以当成可视化组件解析,要求实现该接口的initialized(document:Object,?id:String):void方法。 权限控制: 在Flex中定义一个Action组件,在通用框架与具体人机界面的UI组件之间建立起一种隔离,使得通用框架不再控制具体的UI组件,而只是控制Action的属性。UI组件只需要将自身属性(一般是enabled属性和visible属性)与Action组件对应的属性绑定即可。 下面是实现代码: package?com.action.right.control { import?mx.core.IMXMLObject; [Bindable] public?class?Action?implements?IMXMLObject { private?var?_id:String; var?_document:Object; //此处实现了IMXMLObject接口的initialized方法 public?function?initialized(document:Object,?id:String):void { this._id?=?id; this._document?=?document; } function?get?id():String { return?_id; } get?document():Object { return?_document; } public?var?operationCode:String;//用来对应权限中的操作代码 var?caption:String;//给绑定控件提供文字标签 var?visible:Boolean?=?true;//给绑定控件提供visible属性 var?enabled:Boolean?=?//给绑定控件提供enabled属性 var?checked:Boolean?=?//给绑定控件提供checked属性 } } 再提供一个专门存储Action组件的ArrayCollection派生类UIActions,如下所示: import?mx.collections.ArrayCollection; [//Inspectable元数据标签告诉编译器不允许把非com.action.right.control.Action类型的对象添加到UIActions中 [Inspectable(arrayType="com.action.right.control.Action")] class?UIActions?extends?ArrayCollection { } } 下面是使用代码: <?xml?version="1.0"?encoding="utf-8"?> <s: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" ??xmlns:control="com.action.right.control.*" ??creationComplete="init(event)"> <fx:Declarations> <!--?将非可视元素(例如服务、值对象)放在此处?--> <control:UIActions?id="actions"<control:Action?id="action_stat"?caption="统计报表"?enabled="false"?operationCode="stat"/> action_issue"?caption="发布报表"?enabled="issue"</control:UIActions> </fx:Declarations> <fx:Script> <![CDATA[ import?mx.events.FlexEvent; private?function?init(event:FlexEvent)://functionGrantInfo是权限控制组件 //向权限控制组件中注入受限的动作集合,以使权限系统可以控制界面上哪些能够工作,哪些不能工作 functionGrantInfo.registerUIActions(this.actions); } ]]> </fx:Script> <s:Button?x="58"?y="68"?label="{action_stat.enabled}"189"?y="{action_issue.enabled</s:Module> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |