先来看演示:
说明:这里使用MenuBar组件,MenuBar的数据源是一个ArrayCollection。用户试着修改表单中的索引值和label值,点击编辑按钮后修改ArrayCollection数据,MenuBar的显示数据也随之改变。这就是ArrayCollection的便利神奇之处。
来看源代码:
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="inttApp(event)">
- <mx:Style>
- Application{fontSize:12px;}
- </mx:Style>
- <mx:MenuBar id="menu" dataProvider="{menu_dp}" width="400" />
- <mx:Form x="10" y="63">
- <mx:FormHeading label="菜单编辑" />
- <mx:FormItem label="一级菜单索引">
- <mx:TextInput id="menuIdx" restrict="0-9" text="0" />
- </mx:FormItem>
- <mx:FormItem label="二级菜单索引">
- <mx:TextInput id="subMenuIdx" restrict="0-9" text="0" />
- </mx:FormItem>
- <mx:FormItem label="该索引值的菜单项的文本">
- <mx:TextInput id="label_ti"/>
- </mx:FormItem>
- <mx:FormItem>
- <mx:Button label="编辑" click="editMenu()"/>
- </mx:FormItem>
- </mx:Form>
- </mx:Application>
- <mx:Script>
- <![CDATA[
- import mx.collections.ArrayCollection;
- import mx.events.FlexEvent;
- [Bindable]
- private var menu_dp:ArrayCollection;
- private function inttApp(evt:FlexEvent):void{
- var temp:Array = new Array();
- var subNodes:ArrayCollection = new ArrayCollection([
- {label:"New"},{label:"Open"},
- {label:"Close",enabled:false}
- ])
- temp.push({label:'文件',children:subNodes});
- temp.push({label:"编辑"});
- subNodes = new ArrayCollection( [
- {label:"50%", type:"radio", groupName:"one"},
- {label:"100%", type:"radio",groupName:"one",selected:true},
- {label:"150%",type:"radio",groupName:"one"}
- ]);
- temp.push({label:"视图大小",children:subNodes});
- menu_dp = new ArrayCollection(temp);
- }
- private function editMenu():void{
- var itemToEdit:Object;
- try {
- itemToEdit = menu_dp.getItemAt(int(menuIdx.text));
- if(subMenuIdx.text) {
- itemToEdit = itemToEdit.children.getItemAt(int(subMenuIdx.text));
- }
- itemToEdit.label = label_ti.text;
- menu_dp.itemUpdated(itemToEdit);
- }
- catch(ex:Error){
- }
- }
- ]]>
- </mx:Script>

