Flex Gumbo中如何利用正则表达式过滤XMLListCollection数据的例子

By Minidxer | August 4, 2009

接下来的Flex Gumbo中如何利用正则表达式,过滤XMLListCollection数据。



下面是main.mxml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application name="XMLListCollection_filterFunction_RegExp_test"
  3.         xmlns:fx="http://ns.adobe.com/mxml/2009"
  4.         xmlns:s="library://ns.adobe.com/flex/spark"
  5.         xmlns:mx="library://ns.adobe.com/flex/halo"
  6.         backgroundColor="white">
  7.     <s:layout>
  8.         <s:BasicLayout />
  9.     </s:layout>
  10.  
  11.     <fx:Script>
  12.         <![CDATA[
  13.             private function textInput_change():void {
  14.                 if (textInput.text.length == 0) {
  15.                     xmlListColl.filterFunction = null;
  16.                 } else {
  17.                     xmlListColl.filterFunction = xmlListColl_filterFunc;
  18.                 }
  19.                 xmlListColl.refresh();
  20.             }
  21.  
  22.             private function xmlListColl_filterFunc(item:Object):Boolean {
  23.                 if (textInput.text.length == 0) return true;
  24.                 var f:String = "ig";
  25.                 var wasRegExp:RegExp = new RegExp(textInput.text, f);
  26.                 var nowRegExp:RegExp = new RegExp(textInput.text, f);
  27.                 var wasMatch:Boolean = wasRegExp.test(item.@was);
  28.                 var nowMatch:Boolean = nowRegExp.test(item.@now);
  29.  
  30.                 return (wasMatch || nowMatch);
  31.             }
  32.         ]]>
  33.     </fx:Script>
  34.  
  35.     <fx:Declarations>
  36.         <mx:XML id="nodesXML" source="nodes.xml" />
  37.         <mx:XMLListCollection id="xmlListColl"
  38.                 source="{nodesXML.node}"
  39.                 filterFunction="xmlListColl_filterFunc" />
  40.     </fx:Declarations>
  41.  
  42.     <s:VGroup left="10" right="10" top="10">
  43.         <mx:ApplicationControlBar>
  44.             <mx:Form styleName="plain">
  45.                 <mx:FormItem label="Filter:">
  46.                     <s:TextInput id="textInput"
  47.                             change="textInput_change();" />
  48.                 </mx:FormItem>
  49.             </mx:Form>
  50.         </mx:ApplicationControlBar>
  51.         <mx:DataGrid id="dataGrid"
  52.                 dataProvider="{xmlListColl}"
  53.                 verticalScrollPolicy="on"
  54.                 width="100%"
  55.                 rowCount="10">
  56.             <mx:columns>
  57.                 <mx:DataGridColumn dataField="@was" headerText="Was:" />
  58.                 <mx:DataGridColumn dataField="@now" headerText="Now:" />
  59.             </mx:columns>
  60.         </mx:DataGrid>
  61.         <s:RichEditableText id="sdkVer"
  62.                 editable="false"
  63.                 fontWeight="bold"
  64.                 initialize="sdkVer.text = mx_internal::VERSION;" />
  65.     </s:VGroup>
  66.  
  67. </s:Application>

下面是nodes.xml的代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <nodes>
  3.     <node was="mx.components.ButtonBarButton" now="spark.components.ButtonBarButton" />
  4.     <node was="mx.components.DataGroup" now="spark.components.DataGroup" />
  5.     <node was="mx.components.DropDownList" now="spark.components.DropDownList" />
  6.     <node was="mx.components.FxButton" now="spark.components.Button" />
  7.     <node was="mx.components.FxButtonBar" now="spark.components.ButtonBar" />
  8.     <!-- ... -->
  9. </nodes>
代码:Peter deHaan 翻译/整理/编译:中文Flex例子

Topics: Gumbo, Other | No Comments » | Tags: , ,

Search Posts