Flex中如何用describeType函数和E4X/XML检查对一个类的访问/存取权限的例子

By Minidxer | September 20, 2008

接下来的例子演示了Flex中如何用describeType函数和E4X/XML,检查对一个类的访问/存取权限。

让我们先来看一下Demo可以右键View Source或点击这里察看源代码):


下面是完整代码(或点击这里察看):

Download: main.mxml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3.         layout="vertical"
  4.         verticalAlign="middle"
  5.         backgroundColor="white"
  6.         initialize="init();">
  7.  
  8.     <mx:Script>
  9.         <![CDATA[
  10.             import flash.utils.getDefinitionByName;
  11.  
  12.             import mx.collections.Sort;
  13.             import mx.collections.SortField;
  14.             import mx.collections.XMLListCollection;
  15.             import mx.controls.*;
  16.             import mx.utils.StringUtil;
  17.             import mx.utils.ObjectUtil;
  18.  
  19.             [Embed("bullet_red.png")]
  20.             private const WRITE_ONLY_ICON:Class;
  21.  
  22.             [Embed("bullet_yellow.png")]
  23.             private const READ_ONLY_ICON:Class;
  24.  
  25.             [Embed("bullet_green.png")]
  26.             private const READ_WRITE_ICON:Class;
  27.  
  28.             private var theXML:XML;
  29.             private var theXMLList:XMLList;
  30.             private var theXMLListColl:XMLListCollection;
  31.  
  32.             private function init():void {
  33.                 var theSortField:SortField = new SortField("@name", true);
  34.                 var theSort:Sort = new Sort();
  35.                 theSort.fields = [theSortField];
  36.  
  37.                 // var theXML:XML = describeType(getDefinitionByName("mx.controls.Alert"));
  38.                 theXML = describeType(Label);
  39.                 theXMLList = theXML.factory.accessor.(@declaredBy == theXML.@name);
  40.                 theXMLListColl = new XMLListCollection(theXMLList);
  41.                 theXMLListColl.sort = theSort;
  42.                 theXMLListColl.refresh();
  43.                 list.dataProvider = theXMLListColl;
  44.                 panel.title = "Accessor methods for the " + theXML.@name + " class:"
  45.             }
  46.  
  47.             private function list_labelFunc(item:XML):String {
  48.                 var itemName:String = item.@name;
  49.                 var itemType:String = item.@type.split("::").pop();
  50.                 return StringUtil.substitute("{0} : {1}",
  51.                             itemName,
  52.                             itemType);
  53.             }
  54.  
  55.             private function list_iconFunc(item:XML):Class {
  56.                 var access:String = item.@access;
  57.                 switch (access) {
  58.                     case "readwrite":
  59.                         return READ_WRITE_ICON;
  60.                         break;
  61.                     case "readonly":
  62.                         return READ_ONLY_ICON;
  63.                         break;
  64.                     case "writeonly":
  65.                         return WRITE_ONLY_ICON;
  66.                         break;
  67.                     default:
  68.                         break;
  69.                 }
  70.                 return null;
  71.             }
  72.         ]]>
  73.     </mx:Script>
  74.  
  75.     <mx:Panel id="panel" width="350">
  76.         <mx:List id="list"
  77.                 labelFunction="list_labelFunc"
  78.                 iconFunction="list_iconFunc"
  79.                 verticalScrollPolicy="on"
  80.                 width="100%"
  81.                 itemClick="Alert.show(list.selectedItem.toXMLString());" />
  82.  
  83.         <mx:ControlBar>
  84.             <mx:Button label="Read/Write" icon="{READ_WRITE_ICON}" skin="{null}" />
  85.             <mx:Button label="Read Only" icon="{READ_ONLY_ICON}" skin="{null}" />
  86.             <mx:Button label="Write Only" icon="{WRITE_ONLY_ICON}" skin="{null}" />
  87.         </mx:ControlBar>
  88.     </mx:Panel>
  89.  
  90. </mx:Application>
代码:Peter deHaan 翻译/整理/编译:中文Flex例子

Topics: Flex | No Comments » | Tags: , , , , ,

Search Posts