科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在Flash影片应用程序中处理结果和结果集对象

在Flash影片应用程序中处理结果和结果集对象

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在Flash影片应用程序中处理结果和结果集对象

作者:zhangyafei 来源:赛迪网技术社区 2007年12月1日

关键字: 结果集对象 处理 FLASH

  • 评论
  • 分享微博
  • 分享邮件
要连接到Java应用程序服务器上的FlashRemotingMX服务并且调用远程服务方法,就必须使用mx.remoting和mx.rpc这两个ActionScript类库:这两个类库包含了所有的FlashRemoting MX for ActionScript 2.0类和方法实现。 } |WN]h_  
b>qgaWja  
其中,mx.remoting是一个十分核心的ActionScript类库,它包含了用来与应用程序服务器建立连接的所有对象及方法,而mx.rpc可以用来调用远程方法并处理结果。 tq]kfyBJ  
g>@JJd;  
在前面的章节中,我们介绍了如何通过FlashRemotingMX网关服务在JSP网页和Servlet中向Flash影片应用程序传递数据,也介绍了如何使用Flash影片应用程序向JSP网页和Servlet传递参数,并且介绍了如何使用Flash Remoting MX forJava与JDBC结合调用数据库,而且创建了几个简单的例子。 S-"PCOG'p  
k7yH$%0J  
但是,当从JSP网页和Servlet向Flash影片应用程序传递的数据被接收到时,如何处理接收到的结果呢?我们在前面的例子中已经使用了一些方法,这只是在Flash影片应用程序中处理结果丰富方法中最简单的,Flash Remoting MX for ActionScript2.0组件内置了丰富的ActionScript脚本语法用来处理结果。 s N2^2$l>  
JAH;vht]M  
本章就来详细地介绍一下这些ActionScript脚本语法。 ?2; ~s>  
(0F&Q{A%J  
c)r|9kQ,8  
I g_;DY  
9.4使用DataGlue类处理记录集数据 QkcRhf[AB  
0 pk!19*m  
要在一个Flash UI组件中显示RecordSet记录集,一般可以使用该组件内建的setDataProvider()方法或者dataProvider属性,但是如果想在一个Flash UI组件中显示记录集中某一字段下的所有记录,就比较困难了。 W/ #nh `[  
ps[dCwx  
例如,在前面的例子中,我们要在一个下拉列表框组件中显示记录集中酒店名,就必须首先创建一个新的单字段记录集,将原记录集中该字段的数据填充新的单字段记录集,然后再使用组件的setDataProvider()方法或者dataProvider属性,显然,这比较麻烦,而且占用的资源也比较多。 b2;atMI1D  
i @. Q+-  
为了解决这个问题,Flash RemotingMX还内建了名为DataGlue的ActionScript类。使用DataGlueActionScript类文件也可以在一个FlashUI组件中显示RecordSet记录集。DataGlueActionScript类文件随同Flash RemotingMX组件一起被安装,要使用它,必须导入相应的类库,可以使用下面的一行脚本: $`?9 dF  
f^X@"(`  
import mx.remoting.DataGlue; [n31k&81}  
@$AzJA[U*  
DataGlue类有两个内建的方法:DataGlue.bindFormatStrings()和DataGlue.bindFormatFunction(),使用这两个方法都可以在Flash UI组件(例如组合框和列表框)中显示记录集。 {wwk{nk+db  
HGqQ*H|4|  
9.4.1使用DataGlue.bindFormatStrings方法绑定记录集 Eq~w-6  
XWFT_  
可以使用DataGlue.bindFormatStrings()方法在一个FlashUI组件(例如组合框和列表框)中显示RecordSet。下面的一段ActionScript脚本代码将结果RecordSet绑定到名为displayNames的列表框UI组件: :.r<*Hq  
\~c5&_]+9  
DataGlue.bindFormatStrings(displayNames, result, "#ContactName#", "#customerID#"); h<[t@2  
4}o?=<v/  
在这一段代码中,后两个参数被传递给函数(#ContactName#和#customerID#是记录集的字段名)。当用户选择组件中一个特殊的纪录时,ContactName列被显示在UI组件中,而customerID列被返回。下面,我们来改造一下前面的例子,看一下如何使用DataGlue类。 ye ]S7 [  
?pDKa3`T  
1打开前面一章我们创建的Restaurant_component.fla文档,将文档另存为Restaurant_component_DataGlue.fla; _f=y-e2GY  
JYN\7Di+72  
2保持当前位于主时间轴编辑状态,修改主时间轴上的脚本代码。在”动作”面板上追加下面的一行脚本代码: i<%O9  
A BP0"[  
import mx.remoting.DataGlue; Gx3Ec @  
_z=tIHYF  
3在舞台上双击影片剪辑元件实例main_mc,使影片剪辑元件main处于编辑状态,选中层Script。保持该层被选中,在“动作”面板上修改其中的脚本代码: Ov2@5a='O  
uqiLkITs5  
将下面的一段脚本代码: I!DW$~c:  
U+'bec@'%  
var newRecordSet:RecordSet = new RecordSet(["hotelName"]); /): :$^  
K>N -gA)Y  
for (var i = 0; i<resultRecordSet.length; i++) { qi;J(]  
0L(F4)y_9  
  newRecordSet.addItemAt(i, {hotelName:resultRecordSet.getItemAt(i).hotel_name}); T"v74r  
4E+ /xio  
} -  ]~5/[  
#)-cq4Q:  
if (newRecordSet.isLocal()) { hn1%  
iS> Dbk  
  newRecordSet.addItemAt(0, {hotelName:"请选择一个酒家或酒店"}); ?.r_2,o  
t^G w:  
  hotelName_cb.dataProvider = newRecordSet; ea 1Y  
,Xx@[  
} tPg}^_Tmp  
l>p0V%_  
替换为 :s>I{&v  
F-/yTe  
DataGlue.bindFormatStrings(hotelName_cb, resultRecordSet, "#hotel_name#", "#hotel_name#"); b_[X3e<~*  
9>=6ET`cW)  
可以看到,前面多行代码实现的功能,现在只需一行就可以实现了。 :cn1cDV%  
@DI[[]\  
4因为现在是使用DataGlue类,所以对于UI组件的读取方式也应该改变一下。在本例中,这段脚本代码位于函数applyFilter()体内: kbAX5w0t.  
j:}=)9!3d  
将下面的一段脚本代码 QlBmB5i:  
QwTHF"/z71  
list_lb.dataProvider = resultRecordSet.filter(thisFilter, hotelName_cb.selectedItem["hotelName"]);  64A[IWl  
] y}$A7D_  
替换为 gRE&dc  
 uY8`&  
list_lb.dataProvider = resultRecordSet.filter(thisFilter, hotelName_cb.selectedItem.label); @Zq K'yPX  
/,UZC{#D  
5最后可以测试一下效果,可以看到与前面的例子功能相同。 .&r9A7&X  
'tgvj$/(  
H[Y=g{gm(  
9.5使用RemotingConnector组件和数据绑定 kpW5 0($  
ykSaWo#  
RemotingConnector是Flash的一个数据组件,使用该组件你可以非常轻松的建立与远程服务的连接——该远程服务必须是通过FlashRemotingMX网关提供——并且可以调用远程服务所定义的方法函数,使用它只需要将该组件拖放到舞台上并定义组件参数,而且可以使用Flash的数据绑定功能。 ~AUDE2t  
X`uaQGrA  
我们在这里要介绍的是首先是通过编写脚本代码的方式使用RemotingConnector组件。 XInXv2IP  
l. I(X.Wb  
" Caa(%l  
9.5.1编写脚本代码使用RemotingConnector组件 tr7}6&  
CR- 8TG  
要通过编写脚本代码的方式使用该组件,也必须首先在开始将RemotingConnector组件拖放到当前舞台上(或者只要在库中就可以了),然后才能开始编写代码使用该组件,这是使用该组件的第一步。 )U <obs/  
[z:2 &|  
另外,在编写脚本代码时要导入RemotingConnector类,这是使用该组件编写脚本代码的第一步,可以使用下面的脚本语句: bw`7$}  
LNk( ^;  
import mx.data.components.RemotingConnector; _}c~7W%<@_  
"05J?T  
下面我们就使用一个例子来看一下怎样使用该组件。 =7Bjo13  
]Mi(Fzl!  
1打开前面一节我们创建的Restaurant_component.fla文档,将文档另存为Restaurant_component_RC.fla; 'x'Mb?q`  
2zb NV  
2保持文档处于主时间轴的编辑状态,改变主时间轴上的脚本代码如下: TG%Uy&q  
jzy%+Mu  
stop(); j`=j6[z!6  
d]<|>5$`  
//------------------------------------------------------------- B/gmz^.  
*u^O.'  
//导入RemotingConnector类 I ]""|h0V&  
#wv$M!  
import mx.data.components.RemotingConnector; fv 8X?&  
NEaN(  
//构造RemotingConnector组件实例并定义实例属性 ? M`:V5e:  
+nR&t$sBA  
var my_rc:RemotingConnector = new RemotingConnector(); KIX'UftH  
X3n LwWt5L  
my_rc.addEventListener("result", returnRowSet_Result); k6jKny 6  
s@ v(M<U  
my_rc.addEventListener("status", returnRowSet_Status); <X~WkV  
 `W`H B  
my_rc.gatewayUrl = "http://localhost:8080/3JK/gateway"; jJ7S#w<<  
46@^}.CH  
my_rc.methodName = "returnRowSet"; ,9@@>s )S  
w;OAu  
my_rc.serviceName = "3JK"; I CZf+ FK  
j(t]X !ft[  
my_rc.suppressInvalidCalls = true; =yN}rz  
wSaN${B  
function GetRestaurantInfo():Void { FJD C}b  
wujca%umq  
if (selectedhotel_name == undefined&&selectedhotel_flavor == undefined &&selectedhotel_location ==undefined) { 47yL:v"4  
'P@c/qaa?t  
    //定义参数为空 Ha`V&[M  
Jt|sh_2{$  
    my_rc.params = null; Z4[Uiq/  
y+1^G[r%  
    //触发连接,调用远程服务方法 $|>m^6s  
fkhn'*  
    my_rc.trigger(); i&{[^/U~p  
M]fb$<B~  
  } else { }2zs<#pY  
g`VHr  
    //定义传递给远程服务方法的参数 (1:.7@s=  
UO(jW )>N  
    my_rc.params ={hotel_name:selectedhotel_name,hotel_flavor:selectedhotel_flavor,hotel_location:selectedhotel_location}; $P{^HA g  
YHZ!Do/`P  
    //触发连接,调用远程服务方法 v[|;2w7  
JmKF*dM"R  
    my_rc.trigger(); (yCS:+;*=  
C,!dLGk  
    selectedhotel_name = "正在加载数据"; '5/M]YV2  
%N<m(rA  
  } O P>/2t6*  
f7Y*Mp2R  
} 7evYPXv3]  
Gj4m>;x,  
function returnRowSet_Result(ev:Object) { ] gk-P  
#hjG/ ,D[  
  //接收结果  8!Bm-  
j?c[3}@  
  main_mc.list_lb.removeAll(); qjqfv n-  
%QL3kSiae  
  main_mc.list_lb.dataProvider = ev.target.results; Sa \f 6N  
G46P7l?  
  selectedhotel_name = ""; >KpG/H  
:r1 ?&H  
  fetchOK = 1; ;V V`J/s,.  
KT}w&i3@  
  main_mc.resultRecordSet = ev.target.results; ]MT[mDX  
Q -bq{k  
} ~gtls6cI  
9n1s?\  
function returnRowSet_Status(stat:Object) { k#Rj" bb  
8esSKR-  
  //接收错误 m: H;p%07  
iob2BNY-  
  trace("接收到错误"); E8`3Zuo  
VZHelQ(  
} wdbJgz1ubL  
C[[_m,3Xt  
//初始化 a 8t[ :F  
V0M.g%KqI  
function ini():Void { F7hD2"  
PUjy1=9  
  if (this.inited != undefined) { =ud%F8O  
\!|hEf<$  
    return; 8 . ?i+  
YqAft~|/-  
  } else { ;;&`bVfp;#  
TsO^ "W  
    var inited:Boolean = true; PJ)k=  
l1e2\ltY  
    GetRestaurantInfo(); HSxC ~ w  
?,;v P`h`3  
  } z{uysh}aL  
@HX]-hs=0  
} eP F0  
*^>MQHxA3-  
ini(); H /)U37U  
+.Wm=  
3打开组件面板,将RemotingConnector组件拖放到舞台上创建一个实例(实际,只需放到库中就可以了)。 l^&e4*  
(T+4tB6`  
最后可以测试一下效果,可以看到与前面的例子功能相同。 查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章