最近在看
在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;
private var _document:Object;
//此处实现了IMXMLObject接口的initialized方法
public function initialized(document:Object, id:String):void
{
this._id = id;
this._document = document;
}
public function get id():String
{
return _id;
}
public function get document():Object
{
return _document;
}
public var operationCode:String;//用来对应权限中的操作代码
public var caption:String;//给绑定控件提供文字标签
public var visible:Boolean = true;//给绑定控件提供visible属性
public var enabled:Boolean = true;//给绑定控件提供enabled属性
public var checked:Boolean = true;//给绑定控件提供checked属性
}
}
再提供一个专门存储Action组件的ArrayCollection派生类UIActions,如下所示:
package com.action.right.control
{
import mx.collections.ArrayCollection;
[Bindable]
//Inspectable元数据标签告诉编译器不允许把非com.action.right.control.Action类型的对象添加到UIActions中
[Inspectable(arrayType="com.action.right.control.Action")]
public class UIActions extends ArrayCollection
{
}
}
下面是使用代码:
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)">
import mx.events.FlexEvent;
private function init(event:FlexEvent):void
{
//functionGrantInfo是权限控制组件
//向权限控制组件中注入受限的动作集合,以使权限系统可以控制界面上哪些能够工作,哪些不能工作
functionGrantInfo.registerUIActions(this.actions);
}
]]>