`

Flex学习笔记_09 数据绑定_运用实例

阅读更多

9.3.1 实现界面的多语言切换

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
   
    <mx:Style source="style.css"/>
   
    <mx:Script>
        <![CDATA[
            import mx.events.DropdownEvent
            import mx.controls.ComboBox
            import mx.binding.utils.BindingUtils
            import mx.utils.ObjectProxy
           
            [Bindable]
            internal var langInfo:ObjectProxy;
           
            internal function initApp():void{
                langInfo = new ObjectProxy();
               
                var langArr:Array = new Array();
                langArr.push({label:"中文界面",data:"cn"});
                langArr.push({label:"英文界面",data:"en"});
                lang_select.dataProvider = langArr;
               
                lang_select.addEventListener(DropdownEvent.CLOSE,changeHandler);
               
                //
                var tmp:Object = langs["cn"];
                //
                for(var i:* in tmp){
                    langInfo[i] = tmp[i];
                }
               
                BindingUtils.bindProperty(title_txt,"text",langInfo,"title");
                BindingUtils.bindProperty(panel_1,"title",langInfo,"about");   
                BindingUtils.bindProperty(des_txt,"text",langInfo,"description");
                       
            }
            internal function changeHandler(evt:DropdownEvent):void{
                var lang:String = ComboBox(evt.target).selectedItem.data;
                var tmp:ObjectProxy = langs[lang];
                //
                for(var i:* in tmp){
                    langInfo[i] = tmp[i];
                }
            }
        ]]>
    </mx:Script>
    <mx:Model id="langs">
        <lang>
            <en>
                <title>English title</title>
                <about>About Flex</about>
                <description>Adobe Flex 2 software is a rich Internet application framework</description>
            </en>
            <cn>
                <title>中文标题</title>
                <about>关于Flex</about>
                <description>Adobe公司的Flex 2软件是一个创建RIA应用的程序框架</description>
            </cn>
        </lang>
    </mx:Model>
   
    <mx:ApplicationControlBar dock="true">
        <mx:Label id="title_txt" width="134"/>
        <mx:Spacer width="100%"/>
        <mx:ComboBox width="96" id="lang_select">
        </mx:ComboBox>

    </mx:ApplicationControlBar>
    <mx:Panel id="panel_1" styleName="myPanel" x="75" y="41" width="250" height="200" layout="absolute">
        <mx:TextArea id="des_txt" x="10" y="10" height="136" width="206"/>
    </mx:Panel>
</mx:Application>

 
langInfo 必须使用ObjectProxy 类型,使用下面的代码来更新,通过中括号[]和通过点号都可以访问属性:
var tmp:Object = langs["cn"];
 for(var i:* in tmp){
    langInfo[i] = tmp[i];
 }

 

9.3.2 制作一款名片浏览器

VO类:tree/pepople.as用来
描述用户信息的类,值对象类,其中描述了用户信息的数据结构:
package tree
{
    //设置类基本的绑定
    [Bindable]
    public class people
    {
        //定义用户的数据
        public var name:String;
        public var email:String;
        public var url:String;
        public var gender:String;
        public var img:String;
       
        //在构造函数中传递数据
        function people(obj:Object):void{
            //遍历所有的属性,并将这些属性赋值给people 的同名属性
            for(var i:String in obj){
                this[i]  = obj[i];
            }           
        }
    }
}
 

自定义事件:event/selectPeopleEvent.as
用在用户列表中,点击用户列表的每个图标,代表用户的单个组件就会派发selectPeopleEvent事件:
package event
{
    import flash.events.Event;
    import tree.people;
   
    //继承Event 类
    public class selectPeopleEvent extends Event
    {
        //存储数据,供监听器使用
        public var selectedUser:people;   
        //使用静态变量定义事件类型
        public static const CLICK_PEOPLE:String = "selectPeople";
       
        function selectPeopleEvent(p:people):void{
            super(selectPeopleEvent.CLICK_PEOPLE,false,false);           
            selectedUser = p;  //接收传递的参数
        }
    }
}
 
自定义的用户组件:tree/peopleItem.mxml
用来显示用户的基本信息,在用户列表中代表一个用户:
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="42" horizontalAlign="left" verticalAlign="middle"
     rollOver="doRollOver()" rollOut="doRollOut()" mouseDown="doPress()">
   
    <mx:Script>
        <![CDATA[
            import tree.people;
            import event.selectPeopleEvent;
           
            [Bindable]
            public var p:people;  //设置p为绑定数据源
           
            //鼠标移入动作,设置边框样式
            internal function doRollOver():void{
                setStyle("borderStyle", "solid");
                setStyle("borderColor", "#666699");               
            }
            //鼠标移出动作,取消设置边框样式
            internal function doRollOut():void{
                setStyle("borderStyle", "none");
            }
            //当点击组件时,派发事件
            internal function doPress():void{
                dispatchEvent(new selectPeopleEvent(p));  //把用户信息派发出去
            }
        ]]>
    </mx:Script>
    <mx:Image width="32" height="32" source="{p.img}"/>
    <mx:Label text="{p.name}"/>
</mx:HBox>
 
主程序:Example_9.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
    <mx:Style source="style.css" />
    <mx:Model id="peoples">
        <users>
            <user>
                <name>小张</name>
                <email>xiaozhang@126.com</email>
                <url>http://www.xhnet.org</url>
                <gender>男</gender>
                <img>images/Baby01.gif</img>
            </user>
            <user>
                <name>小王</name>
                <email>xiaowang@126.com</email>
                <url>http://www.xwnet.org</url>
                <gender>男</gender>
                <img>images/Baby02.gif</img>
            </user>
            <user>
                <name>小李</name>
                <email>xiaoli@hotmail.com</email>
                <url>http://www.xlnet.org</url>
                <gender>女</gender>
                <img>images/Baby03.gif</img>
            </user>
            <user>
                <name>小陈</name>
                <email>xiaoch@gmail.com</email>
                <url>http://www.xcnet.org</url>
                <gender>女</gender>
                <img>images/Baby04.gif</img>
            </user>
            <user>
                <name>大陈</name>
                <email>dach@gmail.com</email>
                <url>http://www.dcnet.org</url>
                <gender>女</gender>
                <img>images/Baby05.gif</img>
            </user>
        </users>
    </mx:Model>
   
    <mx:Script>
        <![CDATA[
            import tree.*;
            import event.*;
           
            [Bindable]
            internal var currentPeople:people; //设置绑定,将作为用户详细信息面板的数据源
           
            internal function initApp():void{
                var users:Object = peoples.user; //访问Model里的数据,得到所有的用户资料
               
                var n:Number = 0; //使用n 记录用户数量
                for(var i:* in users){
                    var newPeople:peopleItem = new peopleItem();
                    var peopleInfo:people = new people(users[i]); //使用users[i]创建用户对象
                    newPeople.p = peopleInfo; //给用户组件的绑定属性p 指定数据,将触发peopleItem组件中的数据绑定
                    holder_user.addChild(newPeople);//将newPeople添加到容器中,并显示出来
//监听组件的点击事件
                    newPeople.addEventListener(selectPeopleEvent.CLICK_PEOPLE,selectHandler);
                    newPeople.y = n*newPeople.height; //设置组件的坐标
                    n++;
                }
            }
               
            internal function selectHandler(evt:selectPeopleEvent):void{
                //修改currentPeople 的值,指向当前点击的对象.selectedUser是事件传过来的信息.表示点击用户的信息,一旦修改了selectedUser,将积分详细面包的数据变化
                currentPeople = evt.selectedUser;
            }
                //tile_user.dataProvider =users;
        ]]>
    </mx:Script>
    <mx:Panel styleName="myPanel" x="23" y="32" width="130" height="268" layout="absolute" title="名册">
        <mx:Canvas id="holder_user" x="0" y="10" width="100%" height="100%"></mx:Canvas>
    </mx:Panel>
    <mx:Panel styleName="myPanel" x="174" y="32" width="235" height="220" layout="absolute" title="详细信息 {currentPeople.name}" horizontalAlign="center" verticalAlign="middle">
        <mx:Image width="32" source="{currentPeople.img}" x="10" y="19"/>               
        <mx:Label x="78" y="9" text="{currentPeople.name}" width="83" fontWeight="bold"/>
        <mx:Label x="10" y="76" text="邮箱:{currentPeople.email}" width="191"/>
        <mx:Label x="10" y="117" text="主页:{currentPeople.url}" width="191"/>
        <mx:Label x="78" y="34" text="{currentPeople.gender}" width="83"/>
    </mx:Panel>
</mx:Application>
 
分享到:
评论
2 楼 Army 2009-03-04  
还有for in循环中*的类型应该是string吧,虽然*也可以,但具体点更精确些感觉。
1 楼 Army 2009-03-04  
很好的例子,只是我发现你的类文件和类名怎么都喜欢首字符小写呢……

相关推荐

    Flex学习笔记.rar

    这份“Flex学习笔记”应该是一个全面的引导,帮助初学者理解Flex的基本概念和技术,通过实例来加深理解,从而快速进入Flex开发的世界。对于想要进一步提升技能的开发者来说,这将是一个很好的起点。

    flex学习笔记,技巧学习

    根据提供的信息,我们可以总结出以下关于Flex学习笔记中的关键技术知识点...综上所述,这些Flex学习笔记涵盖了从基本样式设置到复杂的数据处理与展示等多个方面。对于初学者来说,这些都是非常实用且必须掌握的知识点。

    Flex学习笔记-由浅入深

    Flex是Adobe公司推出的一种用于构建富互联网...随着对Flex的深入学习,开发者将掌握更多高级特性,如数据绑定、动画效果、组件自定义以及与后端服务器的深度集成等,从而能够创建出更复杂、功能丰富的富互联网应用。

    flex学习笔记

    ### Flex 学习笔记知识点详解 #### 一、Flex 技术概述 - **定义**:Flex 是一种用于构建和部署跨浏览器、跨平台的丰富互联网应用程序 (RIA) 的开源框架。 - **特点**: - 强大的 UI 构建能力:允许开发者创建高度...

    Flex学习笔记,入门材料

    ### Flex学习笔记:ActionScript与Flex开发入门 #### 1. ActionScript核心概念 ##### 1.1 类和对象(Class and Object) 类是对象的模板,定义了一组具有相同特性和行为的对象的共同属性和方法。在ActionScript中...

    Flex MVC框架 Cairngorm 学习笔记

    学习Cairngorm,不仅需要掌握以上组件的工作原理,还需要理解如何在实际项目中灵活运用这些组件来构建应用架构。通过良好的实践,开发者可以创建出高效、可扩展的Flex应用程序,提高开发效率,降低维护成本。同时,...

    关于flex的一个实例

    Flex实例通常涉及UI组件的布局、数据绑定、事件处理等核心概念。在实际项目中,Flex允许开发者创建响应式的、可自适应不同屏幕尺寸的界面,广泛应用于网页、桌面和移动应用。 描述中提到的“有源代码”,意味着我们...

    flex学习资源和DEMO例子

    本资源包"flex学习资源和DEMO例子"是针对Flex学习者准备的,包含了一些经过测试的实例,有助于学习者更好地理解和掌握Flex编程。 1. **Flex SDK**:Flex SDK是开发Flex应用的基础,它包含了编译Flex应用所需的工具...

    Flex+spring+hibernate整合视频学习交流part_2

    3. **Flex的数据绑定和远程服务调用**:展示如何在Flex应用中定义服务代理,调用Spring服务并处理返回的数据,以及如何使用Flex的绑定机制将数据实时显示在用户界面上。 4. **实例演示**:可能包含一个完整的案例,...

    vue学习笔记1

    在“vue学习笔记1”中,我们主要探讨了在Vue环境中设置登录页面的过程,包括背景色设置、登录框样式、全局样式配置以及Less loader的安装和使用。 首先,Vue CLI是Vue项目的基础脚手架,它提供了一种快速初始化项目...

    flex开发入门资料

    例如,"复习资料"可能包含关于Flex架构、组件库、布局管理器、数据绑定等内容的讲解;"笔记"可能记录了重要的概念、API使用方法和实例代码;而"精选必过"的文档很可能包含了历年考试题目的解析,帮助学习者巩固对...

    Blaze+Spring整合资料

    4. "Flex 开发学习笔记2 - 采用的架构 BlazeDS + Spring + Hibernate" 可能是一个开发者的学习笔记,详细记录了构建基于这三个技术的完整应用过程,包括配置、数据绑定和事务管理。 5. "快速搭建Spring BlazeDS ...

    零基本开发uniapp微信小程序教程《树洞笔记本》教程源文件与接口

    uniapp采用Vue的响应式数据绑定,通过`data`属性定义数据,`methods`定义方法,学习者将学习如何操作数据并实时更新视图。 5. **接口设计**:教程涵盖数据库接口的开发,学习者将接触API设计和调用,如使用uniapp的...

    前端开发笔记.docx

    基础概念包括变量(`var`, `let`, `const`)、数据类型(如字符串、数字、布尔值、对象等)、条件语句(`if...else`、`switch`)、循环(`for`, `while`)、函数(声明式和匿名函数)以及面向对象编程(类和实例)。...

    jQuery带进度条日期时间轴自动播放代码.zip

    - **数据处理**:如果时间轴上的每个点都有具体的日期,可能需要使用`.each()`遍历所有时间点,根据日期计算它们相对于总时间的比例,以调整进度条的位置。 3. **CSS 样式**: - **布局**:使用CSS实现时间轴的...

    HTML5树形结构图DIV布局代码.zip

    这种树形结构图常用于展示数据层次关系,如组织架构、文件系统或决策流程等。 首先,HTML5中的`&lt;div&gt;`元素是一个通用容器,用来组合其他HTML元素,通过CSS来设置样式或JavaScript来添加交互性。在树形结构图中,每...

    JS美食文字内容TAB切换代码.zip

    总结来说,这个压缩包文件提供了一个基于JavaScript、jQuery和CSS的网页交互特效实例,特别是关于TAB切换的实现,适合网页开发者学习和参考。用户可以根据自身需求对代码进行二次修改,以适应不同的项目或设计风格。

    CSS3实现不规则排列lightbox效果.zip

    对于开发者来说,这是一个很好的学习实例,它涵盖了前端开发中的基础元素和高级技巧,包括事件处理、DOM操作、CSS3动画和响应式布局等。无论是初学者还是经验丰富的开发者,都能从中受益,进一步提升自己的技能。

Global site tag (gtag.js) - Google Analytics