`
nianshi
  • 浏览: 416180 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

flex的event编程(实现组件间传递数据)

    博客分类:
  • Flex
阅读更多

在任何的web应用开发中,在不同的组件中传递数据是一件非常重要的事情, flex的应用开 发也不例外,今天讲一下flex的event.

在 flex中所有的UIComponent都持有flash.events.EventDispatcher对象,通过改对象我们能够让一个 application中的不同UIComponent广播自己的event.,让监听自己event的组件能够获得消息.当事件触发时执行响应的操作, 这样的一种事件驱动方式能够是代码很容易维护,和阅读.

事件的职能除了通知监听事件的组件还有就是传递数据.在事情触发的时候将数据传 递给下一个组件,让下一个组件来完成接下去的工作是一个非常好的实 践.我们通过继承flash.events.Event对象来编写自己的event,并且让自己的event包含我们想要传递的数据.

例如ProductEvent他继承了flash.events.Event同时本身又持有product对象,这样使得下一个组件能够获得 product的所有信息,从而继续对product进行处理.

package  events
{
    
import  flash.events.Event;
    
import  valueObjects.Product;

    
public  class  ProductEvent  extends  Event
    
{
        
public  var product:Product;
        
        
public  function ProductEvent(product:Product,type:String,bubbles:Boolean = false ) {
            
super (type,bubbles);
            
this .product = product;
        }

        
        
public  override function clone():Event {
            
return  new  ProductEvent(product,type,bubbles);
        }

    }

}

有 了ProductEvent对象我们现在要做的就是如何使用这个对象使他在不同的组件中传递.在下面的示例中当我们点击add Botton的时候就会调用itemAdded()方法,改方法创建了一个ProductEvent实例,并且通过调用 this.dispatchEvent(e)方法来广播这个event,同时注意在这个mxml的顶部声明了自己所持有的event是何种类型,还有 event的名字,这个名字将被别的组件用来判断是何种event被触发.

<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< mx:Canvas xmlns:mx = " http://www.adobe.com/2006/mxml "  
    horizontalScrollPolicy
= " off "
  verticalScrollPolicy
= " off " >
  
< mx:Metadata >
      [Event(name
= " itemAdded " ,type = " events.ProductEvent " )]
  
</ mx:Metadata >
  
    
< mx:Script >
        
<! [CDATA[
            
import  events.ProductEvent;
            
import  mx.core.Application;
            
import  valueObjects.Product;
            [Bindable]
            
public  var groceryItem:Product;
            
            
private  function itemAdded(prod:Product): void {
          var e:ProductEvent 
=  new  ProductEvent(prod, " itemAdded " , true );
                   
this .dispatchEvent(e);
      }

      
      
private  function toggleState(state:String): void {
               
if (state  ==  " closed " ) {
                  
this .currentState  =  "" ;
               }
 else  {
                 
this .currentState  =  " expanded " ;
               }

            }



        ]]
>
    
</ mx:Script >
    
    
< mx:states >
   
< mx:State name = " expanded " >
      
< mx:SetProperty target = " {add} "  name = " visible "  value = " true " />
      
< mx:AddChild >
         
< mx:VBox width = " 100% "  x = " 200 " >
            
< mx:Text text = " {groceryItem.description} "  width = " 50% " />
                    
< mx:Label text = " Low Fat "
                  x
= " 100 "  y = " 60 "
                  visible
= " {groceryItem.isLowFat} " />
         
</ mx:VBox >
      
</ mx:AddChild >
   
</ mx:State >
</ mx:states >
    
    
< mx:Canvas mouseOver = " toggleState('open') "  mouseOut = " toggleState('closed') " >
        
< mx:Image id = " pic "
       source
= " {'../assets/'+groceryItem.imageName} " />
    
        
< mx:Label id = " price "
       text
= " {groceryItem.listPrice} "
       x
= " 100 "  y = " 20 " />
    
        
< mx:Button id = " add "
         visible
= " false "
       label
= " Add To Cart "
       click
= " itemAdded(groceryItem) "
       x
= " 100 "  y = " 40 " />
   
</ mx:Canvas >

</ mx:Canvas >

现在我们看一下上面这个mxml的父组件是如何监听的,当itemAdded事件触发时就会调用logItemAdded()方法.

同时这个mxml自己也定义了itemAdded事件,可以将这个事件作为自己的事件继续广播.

<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< mx:VBox xmlns:mx = " http://www.adobe.com/2006/mxml "  xmlns:v = " views.ecomm.* " >
< mx:Metadata >
   [Event(name
= " itemAdded " ,type = " events.ProductEvent " )]
</ mx:Metadata >

    
< mx:Script >
        
<! [CDATA[
            
import  events.ProductEvent;
            
import  mx.collections.ArrayCollection;
            [Bindable]
            
public  var prodByCategory:ArrayCollection;
            
            
private  function logItemAdded(event:ProductEvent): void {
                trace(event.product);
                
this .dispatchEvent(event);
            }

        ]]
>
    
</ mx:Script >
    
< mx:Repeater id = " foodRepeater "
       width
= " 100% "  height = " 100% "
       dataProvider
= " {prodByCategory} " >
       
< v:GroceryDetail id = " prod "  
         width
= " 80% "

         groceryItem
= " {foodRepeater.currentItem} "  itemAdded = " logItemAdded(event) " />
    
</ mx:Repeater >
</ mx:VBox >

但 是如果一个application中有非常深的组件层次如果最底层的event事件被最上层的组件所调用,按照这种方法,这个两个组件中间的组件 中每次都写这样的方法来传递event是非常麻烦,并且恶心的,还好flex对event提供了一个bubbles属性(冒泡),这个属性默认为 false,当显示的设置为true我们就可以在中间的那些组件中不用编写itemAdded="logItemAdded(event)类似的代码,这 样可以节省很多的编码工作,也减少的出错概率,但是中间的那些组件必须在<Metadata>节点中声明需要传递的这个event.例如上面 的示例可以简单的写为

<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< mx:VBox xmlns:mx = " http://www.adobe.com/2006/mxml "  xmlns:v = " views.ecomm.* " >
< mx:Metadata >
   [Event(name
= " itemAdded " ,type = " events.ProductEvent " )]
</ mx:Metadata >

    
< mx:Script >
        
<! [CDATA[
            
import  events.ProductEvent;
            
import  mx.collections.ArrayCollection;
            [Bindable]
            
public  var prodByCategory:ArrayCollection;

        ]]
>
    
</ mx:Script >
    
< mx:Repeater id = " foodRepeater "
       width
= " 100% "  height = " 100% "
       dataProvider
= " {prodByCategory} " >
       
< v:GroceryDetail id = " prod "  
         width
= " 80% "

         groceryItem
= " {foodRepeater.currentItem} " />
    
</ mx:Repeater >
</ mx:VBox >

分享到:
评论

相关推荐

    Flex关于拖拽编程

    在Flex中,拖拽编程是一种常见的交互设计方式,允许用户通过鼠标或其他输入设备将元素从一个位置拖动到另一个位置,常用于数据迁移、组件布局调整或游戏设计等场景。下面我们将详细探讨Flex中的拖拽编程。 1. **...

    Flex与Java通过实体传递数据

    文件"Flex与Java通过实体传递数据"可能包含了示例代码和详细步骤,帮助开发者理解并实现上述过程。在实际项目中,还需要考虑安全性,如加密传输,以及错误处理和异常捕获,确保数据的完整性和应用的稳定性。此外,...

    flex自定义组件事件DEMO

    除了使用已有的事件(如MouseEvent或Event),开发者还可以定义自己的事件类,以便在组件间传递特定信息。创建自定义事件通常包括以下步骤: - 创建事件类:继承自mx.events.Event类或与其相关的子类,如FlexEvent...

    Flex DataGrid从XML文件中加载数据

    在Flex编程中,`Flex DataGrid` 是一个用于展示数据集的组件,它允许用户以表格形式查看和操作数据。本示例展示了如何从XML文件加载数据并将其显示在Flex DataGrid中。以下是对该话题的详细解释: 1. **XML数据源**...

    flex获得html容器传递的url参数值

    在Flex编程中,有时我们需要从外部HTML容器向SWF文件传递参数,这在构建富互联网应用程序(RIA)时尤其常见。这些参数通常是以URL查询字符串的形式出现,例如`test.html?name=jex&address=chengdu`。在本文中,我们...

    FLEX简单的入门快速总结

    在Flex中,事件是传递信息和协调组件间交互的主要方式。虽然Flex提供了一系列内置事件,但有时我们需要自定义事件来满足特定需求。创建自定义事件通常包括定义一个继承自`flash.events.Event`的类,并重写其构造函数...

    FLEX教程-FLEX教程

    - 实现页面间的参数传递和状态保持。 #### 14. manager - **Manager 类**: Flex 中用于管理和协调不同部分的类。 - **示例**: 如 LayoutManager 用于控制布局,EventManager 用于处理事件等。 #### 15. Demo8:...

    flex Socket 通信

    Flex中的Socket组件允许开发者创建TCP套接字连接,以发送和接收二进制或文本数据。在Java中,我们可以使用java.net.Socket类来建立客户端连接,或者使用ServerSocket类来创建服务器端监听套接字,等待来自Flex客户端...

    Flex与Java低数据量通信息一:HTTPService

    Flex是Adobe公司开发的一种用于构建富互联网应用(RIA)的开放源代码框架,它主要使用ActionScript编程语言,与XML、AMF等数据格式进行交互。在本篇中,我们将探讨Flex与Java之间的低数据量通信,特别是通过...

    flex3自定义DownloadProgressBar

    本文将围绕“flex3自定义DownloadProgressBar”这一主题展开,讲解如何在Flex3中创建一个定制化的下载进度条组件,并探讨相关的编程技术和实践。 一、自定义组件基础 在Flex中,自定义组件是通过继承已有的...

    Flex与Java通信实例程序(分工程实现)

    本实例程序展示了如何在Flex前端和Java后端之间通过XML进行数据交换,从而实现两个不同工程之间的协作。 Flex是一种基于ActionScript的开源框架,主要用于创建具有丰富用户界面的Web应用程序。它使用MXML和...

    flex+cairngorm+java 实例

    5. **Event**:定义了应用程序中的自定义事件,用于在组件之间传递消息。 6. **Proxy**:作为客户端和服务器之间的中间层,处理远程调用和数据转换。 在这个Flex Cairngorm Java实例中,Java技术如J2EE(Java 2 ...

    flex与httpService通信(java)

    通过`HTTPService`,Flex可以与各种服务器端技术,如Java、PHP、ASP.NET等进行交互,实现数据的获取和提交。 2. **Java后台支持** 在Java环境下,通常使用Servlet、Spring MVC或者RESTful API来处理来自Flex的HTTP...

    Flex Cairngorm Parsley Demo 源码

    4. **事件驱动编程**:查看源码中EventDispatcher的使用,理解如何通过事件驱动来协调组件间的交互。 5. **模块化设计**:如果Demo包含多个模块,可以学习如何使用Parsley的模块功能来组织和管理不同部分的代码。 ...

    跟我StepByStep学FLEX教程------王一松

    - **BlazeDS介绍**:BlazeDS是一种用于实现Flex和Java服务器之间通信的服务端组件。 - **通信机制**:探讨BlazeDS与Flex客户端之间的数据交换方式。 #### 21. Flex和Java通信之开发方式和工具准备 - **开发环境...

    Flex_DragDrop

    描述中提到提供了Flex中图片组件的拖放实现实例源码,并暗示后续会有更多关于表格数据等其他组件的拖放示例。 Flex是Adobe开发的一个用于构建富互联网应用程序(RIA)的框架,它基于ActionScript和MXML,支持创建...

    ActionScript的自定义组件及自定义事件例子

    1. **定义事件类**:创建一个新类,继承自Event或FlexEvent类,定义事件类型常量和数据属性。 2. **构造函数**:重写构造函数,传递事件类型和是否冒泡等参数。 3. **派发事件**:在需要触发事件的地方,使用`...

    flex环境搭建技术指导

    BlazeDS允许Flex应用与Java后台服务进行交互,实现数据的传输。 在Flex与Spring、Hibernate整合的场景下,通常会用到Cairngorm框架。Cairngorm是一种基于MVC(Model-View-Controller)架构的轻量级框架,它有助于...

    FLEX中下拉框嵌入Checkbox

    在Flex编程中,下拉框(ComboBox)是用户界面中常用的一种组件,它允许用户从预定义的选项中选择一个值。然而,有时我们需要在下拉框中不仅提供文本选项,还需要提供复选框(Checkbox)来让用户进行多选操作。这种...

    Flex中函数传值调用Demo

    本Demo主要展示了如何在Flex中进行函数之间的参数传递,以便实现不同功能模块之间的数据交互。下面将详细解释相关知识点。 1. **ActionScript基础**: Flex主要使用ActionScript作为其编程语言,它是一种基于...

Global site tag (gtag.js) - Google Analytics