2.7 为菜单提供数据
2.7.1 问题
用 data provider 生成菜单栏
2.7.2 解答
用 MXML 为 MenuBar 控件的 dataProvider 属性指定一个 ArrayCollecton , XMLListCollection 之类的 Collection 对象。
Recipe 2.7.3. Discussion
2.7.3 讨论
用数据生成一个 MenuBar 控件最简单的方式是用 MXML 在控件内部生成一个 XMLList 类型的实例。
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"> <mx:MenuBar labelField="@label"> <mx:XMLList> <menuitem label="File"> <menuitem label="New"/> <menuitem label="Open"/> <menuitem label="Close" enabled="false"/> </menuitem> <menuitem label="Edit"/> <menuitem label="Source"/> <menuitem label="View"> <menuitem label="50%" type="radio" groupName="one"/> <menuitem label="100%" type="radio" groupName="one" selected="true"/> <menuitem label="150%" type="radio" groupName="one"/> </menuitem> </mx:XMLList> </mx:MenuBar> </mx:Application>
因为 dataProvider 属性是 MenuBar 控件的默认属性, XMLList 对象可以被指派作为 <mx:MenuBar> 标签的直接子对象。 XMLList 中的顶级节点相当于 MenuBar 上的按钮。这些节点可以取任何名字——比如,不用 menuitem 也能作为子节点。不过,节点的属性有特别的意思,并影响显示的效果和菜单交互。这些属性列表如下:
enabled
指定用户时候能选择这个菜单项。
groupName
当类型是 radio 时适用。具有相同 groupName 的菜单项作为一组 radio 。
icon
指定一个图片资源的类标识符。
label
指定菜单项显示的内容。注意当 dataProvider 是 E4X 格式,就像前面的例子, MenuBar 的 labelField 属性必须明确指定,即使在 XMLList 里有 label 属性。
toggled
指定 check 或 radio 类型的菜单项是否是选中状态。
type
指定菜单的类型(三种选项): check, radio, 或 separator 。其中 separator 是默认的,也就是不需要指定。