论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

ActionScript处理异步事件(三)

文章类别:Flash AS编程 | 发表日期:2008-10-6 17:37:39


原文地址:http://kuwamoto.org/2006/05/19/dealing-with-asynchronous-events-part-3/
作者:Sho Kuwamoto
译者:Dreamer

我想要谈论一下Flex 2中对RPC呼叫机制的一些改进。如果不是Matt Chotin友好地告诉我Flex 2中的RPC呼叫已经正式改为返回AsyncToken类型的对象,我可能永远都不会知道,这再一次证明了关于Flex他比我知道的多。

使用 AsyncToken 和 Responders

为了使用as-is机制,你要象这样做:
public function getAlbumInfo(albumId: int) : void    
  1. {    
  2.   // Initiate the call.    
  3.   myService.request = { type: "album", albumId: albumId };    
  4.   var call : AsyncToken = myService.send();    
  5.   // Save the albumId for use later.    
  6.   call.albumId = albumId;    
  7.   // Wire up the handler.    
  8.   call.responder = new Responder(getAlbumInfoResult, null);    
  9. }    
  10. public function getAlbumInfoResult(event: Event) : void    
  11. {    
  12.   // Deal with the results of the previous call.    
  13.   var artistId: int = event.result.album.artistId;    
  14.   myAlbumList.addAlbum(event.call.albumId, event.result.album);    
  15.   // Initiate the next call.    
  16.   myService.request = { type: "artist", artistId : artistId };    
  17.   var call : AsyncToken = myService.send();    
  18.   // Save the artistId for use later.   
  19.   call.artistId = artistId;    
  20.   // Wire up the handler.    
  21.   call.responder = new Responder(getArtistInfoResult, null);    
  22. }    
  23. public function getArtistInfoResult(event: Event) : void    
  24. {    
  25.   // Handle the results of the second call.    
  26.   myArtistList.addArtist(event.call.artistId, event.result.artist);    
  27. }   

你会发现它与上一篇文章中的第一个例子非常相似。 最主要的区别就是现在我们 在framework里而不是在你的代码中实现处理器(handler)。
如果我们有匿名的内部类

如果ActionScript有匿名的内部类,你可以象这样压缩它,就像早先我提到的closure方法一样:

public function getAlbumInfo(albumId: int) : void    
  1. {    
  2.   var call: AsyncToken;    
  3.   // Initiate the first call.    
  4.   myService.request = { type: "album", albumId: albumId };    
  5.   call = myService.send();    
  6.   call.responder = new IResponder()    
  7.   {    
  8.     public function result(data:Object):void    
  9.     {    
  10.       // Handle the results of the first call.    
  11.       var artistId: int = event.result.album.artistId;    
  12.       // Notice we can use albumId here directly.    
  13.       myAlbumList.addAlbum(albumId, event.result.album);    
  14.       // Initiate the second call.    
  15.       myService.request = { type: "artist", artistId: artistId };    
  16.       call = myService.send();    
  17.       call.responder = new IResponder()    
  18.       {   
  19.         public function result(data:Object):void    
  20.         {    
  21.           // Handle the results of the second call.    
  22.           myArtistList.addArtist(artistId,event.result.artist);    
  23.         }    
  24.       }    
  25.     }    
  26.   }    
  27. }   

即使使用了匿名的内部类(ActionScript 并没有这个东西),我还是觉得它不如 closure 方法易读性高,所以我想我会一直使用osure方法。
视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058