用amfphp时,一个界面上要同时取得多个数据结果集,要定义多个remoteobject对象吗?
类似于下面这样的remoteobject定义:
- XML code
var remoteServer:RemoteObject=new RemoteObject();remoteServer.destination="amfphp";remoteServer.source="InfoMethods";remoteServer.getUserInfo.send();remoteServer.addEventListener(FaultEvent.FAULT, faultForContactDB);remoteServer.addEventListener(ResultEvent.RESULT, resultHandler);
如果我一个界面初始的时候,就要用到5个数据表,要取数据库5次,返回5个结果集,是不是要这样定义5次啊,有没有更好的方法?还有5次的resultHandler事件,是不是要分开写5个函数?不然怎么判断取得是哪个表里的数据?
[解决办法]
可以在php里处理把所有的结果返回一数组.
在前台再处理数组.
[解决办法]
RemoteObject只要定义一个,但是一个方法对应一个resultHandle函数
<RemoteObject id="" destination="" showBusyCursor="true">
<mx:Method name="方法a" result="" fault=""/>
<mx:Method name="方法b" result="" fault=""/>
<mx:Method name="方法c" result="" fault=""/>
</mx:RemoteObject>
[解决办法]
自定义一个通信类,可以全部用as代码写。
在类里面构造RemoteObject对象
remoteServer.addEventListener(FaultEvent.FAULT, faultForContactDB);
remoteServer.addEventListener(ResultEvent.RESULT, resultHandler);
faultForContactDB和resultHandler是Function类型的参数,可以传递进来。
给你写个代码示意:
- JScript code
package test{ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.remoting.RemoteObject; public class RemoteManager { private static var instance:RemoteManager=null; public function RemoteManager(innerClass:SingletonInnerClass):void { if (innerClass == null) { throw new Error("can't create RemoteManager instance"); } } /** * 设计为单例 */ public static function getInstance():RemoteManager { if (instance == null) { instance=new RemoteManager(new SingletonInnerClass()); } return instance; } /** * 有需要的话追加参数 */ public function send(url:String, method:String, successFunction:Function, faultFunction:Function,params:Object):void { // 这里面创建RemoteObject等对象 var remoteObject:RemoteObject=new RemoteObject(); // 设置相应的其他属性(此处省略) 包括Operation remoteObject.addEventListener(ResultEvent.RESULT, successFunction); remoteObject.addEventListener(FaultEvent.FAULT, faultFunction); } } // 外部访问不到 class SingletonInnerClass{};} import flash.events.Event; // 调用的事宜代码:RemoteManager.getInstance().send(url, method,successFunction,faultFunction);private function successFunction(event:Event):void{}private function faultFunction(event:Event):void{}// 或者使用匿名函数RemoteManager.getInstance().send(url, method,function (event:Event):void{},function (event:Event):void{},params);
[解决办法]
补充一下:
如果想做的更完美可以在send方法里面这样写:
- JScript code
public function send(url:String, method:String, successFunction:Function, faultFunction:Function,params:Object):void{ // 这里面创建RemoteObject等对象 var remoteObject:RemoteObject=new RemoteObject(); // 设置相应的其他属性(此处省略) 包括Operation remoteObject.addEventListener(ResultEvent.RESULT, function (event:ResultEvent):void { // 此处可以做一些通用的处理 // 忽略 // 把event里面的信息取出来传下去 successFunction(event.message); }); remoteObject.addEventListener(FaultEvent.FAULT, function (event:FaultEvent):void { // 通用此处做一些通用的处理,比如失败了,如果提示信息,显示错误等等 // 忽略 // 把event里面的信息取出来传下去 faultFunction(event.message) });}