`
ycy303
  • 浏览: 196529 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Flex 3 cookbook: 2.8 动态填充菜单

    博客分类:
  • flex
阅读更多

2.8 动态填充菜单

2.8.1 问题

你想填充并动态改变菜单

2.8.2 解答

ActionScript 分配一个 ArrayCollection XMLListCollection 这样的 Collection 对象给 MenuBar 控件的 dataProvider 属性。

2.8.3 讨论

Flex 3 里的 MenuBar 控件支持在运行时动态生成菜单项。下面的代码生成一个有 MenuBar 控件的应用,当应用被初始化时,这个 MenuBar 被一个 ArrayCollecton 对象填充。

 

<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical"
    creationComplete="initApp(event)">

    <mx:MenuBar id="menu" dataProvider="{menu_dp}"/>

    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;

            [Bindable]
            private var menu_dp:ArrayCollection;

            private function initApp(evt:FlexEvent):void {
                var temp:Array = new Array();

                var subNodes:ArrayCollection = new ArrayCollection([{label:"New"},
                                                                      {label:"Open"},
                                                                      {label:"Close",enabled:false}]);
                temp.push({label:"File",children:subNodes});
                temp.push({label:"Edit"});
                temp.push({label:"Source"});

                subNodes = new ArrayCollection([{label:"50%", type:"radio",roupName:"one"},
                                           {label:"100%", type:"radio", groupName:"one",selected:true},
                                           {label:"150%", type:"radio", groupName:"one"}]);
                temp.push({label:"View",children:subNodes});
                menu_dp = new ArrayCollection(temp);
            }
        ]]>
    </mx:Script>
</mx:Application>
 

 

上述代码用 binding 绑定一个名为 menu_dp ArrayCollecton 对象到 MenuBar 组件的 dataProvider 属性。在该应用的 creationComplete 事件发生时, menu_dp 被初始化,并填充菜单项。就像 Flex 里的其它数据驱动组件一样,使用类似 ArrayCollection XMLListCollection Collection 组件,可以确保基础数据的任何变化都会导致控件的显示作相应的刷新。

译者注 : 请将 subNodes 的第二项的 selected 属性改成 toggled 。如 2.7 节所述, toggled 属性才是控制 radio 类型的菜单项是否被选中的。

Collection 组件提供了便利的方法编辑,添加,删除菜单项。为了说明这一点,这个例子在 MenuBar 下添加了一个简单的 Form 组件,让你可以根据他们在 ArrayCollecton 里的索引编辑菜单。

   

 

<mx:Form>
        <mx:FormHeading label="Menu Editor"/>
        <mx:FormItem label="Menu Index">
            <mx:TextInput id="menuIdx" restrict="0-9" text="0" width="20"/>
        </mx:FormItem>
        <mx:FormItem label="Sub-Menu Index">
            <mx:TextInput id="subMenuIdx" restrict="0-9" width="20"/>
        </mx:FormItem>
        <mx:FormItem label="Menu Label">
            <mx:TextInput id="label_ti"/>
        </mx:FormItem>
        <mx:FormItem>
            <mx:Button label="Edit" click="editMenu()"/>
        </mx:FormItem>
    </mx:Form>
 

 

 

这是一个很基础的 Form ,它的 input 控件可以让你指定数组索引,依此来获取一个特定的菜单项。在 menuIdx 文本框里输入 0 ,并保持 subMenuIdx 为空,则指定 File 菜单的顶级。在 menuIdx 文本框里输入 0 ,在 subMenuIdx 里输入 0 ,则指定 New 子菜单项。

当用户单击 Edit 按钮, editMenu 方法就被调用,这个方法用指定的索引来获取某个菜单项的引用并改变它的标签。请看如下代码:

 

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){
        trace("could not retrieve menu item");
    }
}
 

 

 

editMenu 里的代码查找输入 menuIdx subMenuIdx 里的值,依此去寻找一个特定的菜单项,然后用 label_ti 里的值去刷新那个菜单项显示的内容。注意:为了改变菜单的显示,与 MenuBar 关联的 dataProvider 被改变了,然后用 ArrayCollecton itemUpdated 方法来请求刷新菜单显示。在类似这个例子的嵌套数据结构中,调用 itemUpdated 来请求显示刷新很重要。否则,基础数据改变了,但是显示仍然是旧的内容。示例代码中用了一个 try…catch 块来为数组界限做一些基础的错误处理。

 

  • 大小: 6.8 KB
分享到:
评论

相关推荐

    Android Cookbook: Problems and Solutions for Android Developers

    English | 10 May 2017 | ASIN: B071VLZ9ZK | 838 Pages | AZW3 | 12 MB Jump in and build working Android apps with the help of more than 230 tested recipes. The second edition of this acclaimed cookbook...

    NGINX Cookbook: Advanced Recipes for High Performance Load Balancing

    《NGINX Cookbook: Advanced Recipes for High Performance Load Balancing》是由Derek DeJonghe编写的,这本书在2019年出版,ISBN为9781491968932,包含了175页的英文内容,格式为PDF。这本书专门针对那些希望提升...

    Flex3 CookBook 教程

    3. **组件库的使用**:Flex提供了一整套预定义的UI组件,如按钮、文本框、列表等,了解如何创建、自定义和组织这些组件以构建专业级的用户界面。 4. **数据绑定**:学习如何利用Flex的数据绑定机制,实时更新界面...

    Flex 3 cookbook 2008

    Flex 3 Cookbook by Joshua Noble; Todd AndersonPublisher: O'ReillyPub Date: May 6, 2008 Print ISBN-13: 978-0-596-52985-7 Pages: 704 The best way to show off a powerful new technology is to demonstrate...

    flex3 cookbook.rar

    《Flex3 Cookbook》是针对Adobe Flex 3这一版本的开发指南,主要涵盖了使用Flex构建富互联网应用程序(RIA)的各种技术和策略。Flex是一个开源框架,它允许开发者使用MXML和ActionScript来创建交互式、高性能的Web...

    Flex 4 Cookbook

    Flex 4 Cookbook

    Flex 3 Cookbook.rar

    2. **数据绑定**:Flex 3中的数据绑定机制是其强大之处,书籍会讲解如何将UI组件与后台数据模型关联,实现动态更新和双向数据同步。 3. **事件处理**:书中会涵盖如何监听和响应各种用户交互事件,以实现应用的动态...

    Flex 4 Cookbook 英文版( pdf 非影印版)

    《Flex 4 Cookbook》是一本由Joshua Noble、Todd Anderson、Garth Braithwaite、Marco Casario 和 Rich Tretola 联合编写的英文书籍,由著名的O'Reilly Media出版,专注于Flex 4技术的实用教程。本书旨在帮助读者...

    Flex 3 CookBook 源码

    Flex 3 CookBook源码 Flex 3 CookBook源码

    flex3 cookbook 英文版pdf

    - **动态填充菜单**:进一步扩展上一点,演示如何根据运行时数据动态更新菜单内容。 以上仅为《Flex3 Cookbook》中部分内容的概括,该书深入浅出地覆盖了Flex与ActionScript的核心技术和实践技巧,对于希望精通Flex...

    VMware cookbook: A Real-World Guide to Effective VMware Use

    ### VMware Cookbook: 实际应用指南 #### 书本概述与目标读者 《VMware Cookbook》是一本详尽的指南,旨在帮助IT专业人士深入了解VMware ESX和ESXi的实际应用场景,并提供一系列逐步解决问题的方法。这本书不仅...

    Flex 3 Cookbook.Flex 3 Cookbook.Flex 3 Cookbook.Flex 3 Cookbook.Flex 3 Cookbook.

    Flex 3 Cookbook 是一本专注于Adobe Flex 3技术的实用指南,旨在帮助开发者深入理解和应用Flex 3框架。Flex 3 是一个用于构建富互联网应用程序(RIA)的开发平台,它结合了MXML和ActionScript 3.0,使得UI设计和编程...

    Flex中文帮助+Flex3cookbook中文版

    6. **移动应用开发**:Flex 3也支持开发移动应用程序,这部分可能包含针对移动设备的优化方法。 总之,这个压缩包对于想要学习Flex和ActionScript 3.0的初学者来说是一份宝贵的资源。通过阅读中文帮助文档和实践...

    flex3 cookbook 源码 完整版

    《Flex3 Cookbook》是针对Adobe Flex 3这一版本的开发指南,它包含了丰富的代码示例和实践教程,帮助开发者深入理解和应用Flex技术。这个完整版的资源包括了源码、范例XML数据以及Bonus Chapter的代码,对于学习和...

Global site tag (gtag.js) - Google Analytics