ThomasBurleson
3/28/2011 - 3:37 PM

BabelFx - Use of XML to dynamically build MenuBar solution.

BabelFx - Use of XML to dynamically build MenuBar solution.

<?xml version="1.0" encoding="utf-8"?>
<mx:MenuBar 
		labelField="@label"
		dataProvider="{ _menuDataProvider.menuitem }"
		xmlns:fx="http://ns.adobe.com/mxml/2009" 
		xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
	
  <fx:Script>
	<![CDATA[
		public function set main(items:Array) :void {  updateMenu( _menuDataProvider.menuitem,              items);	}
		public function set form(items:Array) :void {  updateMenu( _menuDataProvider.menuitem[0].menuitem,  items);	}
		public function set edit(items:Array) :void {  updateMenu( _menuDataProvider.menuitem[2].menuitem,  items);	}
		
		/**
		 * Update XML list of menu items, then force databinding updates
		 * so the menu renders with latest data changes. 
		 * 
		 */
		private function updateMenu(target:XMLList, items:Array):void {
			for (var j:uint=0; j<items.length; j++) {
				target[j].@label = items[j] as String;
			}
			executeBindings(true);
		}

		[Bindable]
		private var _menuDataProvider : XML =  
			<menus>
			   <menuitem label="Form">
				  <menuitem label="New Form"/>
				  <menuitem label="Open Form"/>
				  <menuitem label="Save As"/>                 
				  <menuitem label="Delete Form"/>
			   </menuitem>
				<menuitem type="separator"/>
				<menuitem label="Edit control" >
					<menuitem label="Edit selected control"/>
					<menuitem label="Delete selected controls"/>
					<menuitem label="Select all"/>
					<menuitem label="Clear selection"/>
					<menuitem label="Move selected controls to tab"/>
				</menuitem>
				<menuitem type="separator"/>
				<menuitem label="Help"/>
		   </menus>;
		
	]]>
  </fx:Script>
	
</mx:MenuBar>