读书人

用amfphp时一个界面上要同时取得多个

发布时间: 2012-02-14 19:19:19 作者: rapoo

用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)        });} 

读书人网 >flex

热点推荐