flex IMXMLObject接口

 

本文来自:http://blog.csdn.net/sysu_2010/article/details/6738313

在Flex中,所有的ActionScript类可以根据是否可视分为两类:可视化组件和不可视组件。可视化组件都从mx.core.UICmponent继承,用于完成与用户的交互;不可视组件主要用来完成一些与人机交互无关的工作,大多数与数据处理相关,比如数据校验、格式化、远程数据访问等。

如果不可视化组件实现mx.core.IMXMLObject接口,当用MXML标记定义这个类的对象时,MXML编译器能够使该对象初始化。IMXMLObject接口非常简单,只要求该接口的实现类实现一个initialized(document:Object, id:String):void方法。一旦不可视组件实现了这个接口,那么在编译时,MXML编译器在创建该不可视类实例的ActionScript语句之后添加了一条调用initialized方法的ActionScript语句,使得在运行时实现IMXMLObject接口的不可视对象在其代码中能够访问它当前所在的文档对象。

解决问题:

1.根据权限来维护UI交互组件的状态

2.工作流驱动的界面中的UI交互组件,只有当前任务环节的UI交互组件才能够工作。

实例:在Flex中定义一个这样的Action组件,这样就在通用框架与具体人机界面的UI组件之间建立起一种隔离,使得通用框架不再控制具体的UI组件(耦合性降低),而只是控制Action的属性。UI组件只需要将自身属性(enabled和visible)与Action组件相对应的属性绑定即可以。

Action代码:

  1. package com.st.sample  
  2. {  
  3.     import mx.core.IMXMLObject;  
  4.     [Bindable]  
  5.     public class Action implements IMXMLObject  
  6.     {  
  7.         private var _id:String;  
  8.         private var _document:Object;  
  9.           
  10.         public function Action()  
  11.         {  
  12.         }  
  13.           
  14.         public function initialized(document:Object, id:String):void  
  15.         {  
  16.             this._document = document;  
  17.             this._id = id;  
  18.         }  
  19.   
  20.         public function get id():String  
  21.         {  
  22.             return _id;  
  23.         }  
  24.   
  25.         public function get document():Object  
  26.         {  
  27.             return _document;  
  28.         }  
  29.           
  30.         public var operationCode:String;//对应权限中的操作码   
  31.         public var caption:String; //绑定控件提供文字标签   
  32.         public var visible:Boolean = true//绑定控件提供visible属性   
  33.         public var enabled:Boolean = true//提供enabled属性   
  34.         public var checked:Boolean = true//提供checked属性   
  35.   
  36.     }  
  37. }  

package com.st.sample { import mx.core.IMXMLObject; [Bindable] public class Action implements IMXMLObject { private var _id:String; private var _document:Object; public function Action() { } public function initialized(document:Object, id:String):void { this._document = document; this._id = id; } 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属性 } }UIActions是一个专门存储Action组件的ArrayCollection派生类:

  1. package com.st.sample  
  2. {  
  3.     import mx.collections.ArrayCollection;  
  4.       
  5.     import mx.core.IMXMLObject;  
  6.     [Bindable]  
  7.     public class UIActions extends ArrayCollection  
  8.     {  
  9.           
  10.         public function UIActions(source:Array=null)  
  11.         {  
  12.             super(source);  
  13.         }  
  14.   
  15.     }  
  16. }  

package com.st.sample { import mx.collections.ArrayCollection; import mx.core.IMXMLObject; [Bindable] public class UIActions extends ArrayCollection { public function UIActions(source:Array=null) { super(source); } } }
用途:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                xmlns:s="library://ns.adobe.com/flex/spark"   
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:sample="com.st.sample.*">  
  5.     <fx:Declarations>  
  6.         <!-- Place non-visual elements (e.g., services, value objects) here -->  
  7.         <sample:UIActions>  
  8.             <sample:Action id="action_stat" caption="统计报表" operationCode="stat" enabled="false"/>  
  9.         </sample:UIActions>  
  10.     </fx:Declarations>  
  11.     <s:Button x="123" y="124" label="发布报表" enabled="{this.action_stat.enabled}"/>  
  12.     <s:Button x="271" y="124" label="统计报表"/>  
  13.       
  14. </s:Application>  

<?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" minWidth="955" minHeight="600" xmlns:sample="com.st.sample.*"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> <sample:UIActions> <sample:Action id="action_stat" caption="统计报表" operationCode="stat" enabled="false"/> </sample:UIActions> </fx:Declarations> <s:Button x="123" y="124" label="发布报表" enabled="{this.action_stat.enabled}"/> <s:Button x="271" y="124" label="统计报表"/> </s:Application>

转载于:https://www.cnblogs.com/wyyLick/archive/2011/10/23/2222056.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值