我的Flex4(AIR)项目中有以下XML,用于定义菜单界面的开头:
<mx:MenuBar x="0" y="0" width="100%" id="myMenuBar" labelField="@label" itemClick="menuChange(event)">
<mx:dataProvider>
<s:XMLListCollection>
<fx:XMLList xmlns="">
<menu label="File">
<item label="New"/>
<item label="Load"/>
<item label="Save" enabled="false"/>
</menu>
<menu label="Help">
<item label="About"/>
</menu>
</fx:XMLList>
</s:XMLListCollection>
</mx:dataProvider>
</mx:MenuBar>
我试图找到一个语法,让我通过单击“加载”加载文件后将保存按钮设置为enabled = true,但是我无法弄清楚语法,有人可以提出建议吗
目前检测到按钮点击的方式是通过Switch / Case测试MenuEvent event.item。@ label的String结果。也许这不是最好的方式?
答案 0 :(得分:5)
再次回答我自己的问题。什么是我正在做的事似乎没有人似乎想回答???
无论如何,这是:
事实证明,由于菜单栏是用XML定义的,而且它完全是任意的,它完全取决于你决定如何定义菜单,在我的例子中,根据上面的菜单XML,改变“eanabled”状态的语法“保存”按钮的内容如下所示。
menubarXML.item.(@label=="Save").@enabled = "true";
其中enubarXML是一个XMLListCollection,它保存了我单独重新定义的XMLList。
[Bindable]
public var menuBarCollection:XMLListCollection;
private var menubarXML:XMLList =<>
<menu label="File">
<menuitem label="New" data="1A"/>
<menuitem label="Open" data="1B"/>
<menuitem label="Save" data="1C" enabled="false"/>
</menu>
<menu label="Help" data="2A">
<menuitem label="About" data="2A"/>
</menu>
</>;
然后在完成应用程序创建时调用此函数:
private function initCollections():void {
menuBarCollection = new XMLListCollection(menubarXML);
}
当然还有菜单栏的XML定义(根据需要自定义):
<mx:MenuBar id="myMenuBar" labelField="@label" itemClick="menuChange(event)" dataProvider="{menuBarCollection}"/>
希望有人发现我的劳动成果很有用。
答案 1 :(得分:0)
private var actions : Object = {
mi_new : mi_new,
mi_open : mi_open
};
protected function myMenuBar_itemClickHandler(event:MenuEvent):void
{
actions[event.item.@action]();
}
private function mi_new() : void {
// do new stuff
}
private function mi_open() : void {
// do open stuff
}
private var menubarXML:XMLList =<>
<menu label="File">
<menuitem label="New" data="1A" action="mi_new"/>
<menuitem label="Open" data="1B" action="mi_open"/>
<menuitem label="Save" data="1C" enabled="false"/>
</menu>
<menu label="Help" data="2A">
<menuitem label="About" data="2A"/>
</menu>
</>;