1

我有一门课,我想在我的项目中使用它。它本质上可以让我轻松地使用 RemoteObject,这样我就不必在我的所有项目中定义它。它在不将“args”传递给 sendRequest(..) 时起作用。但是,当我想用​​参数调用 cfc 函数并尝试在其中传递“args”时,出现以下错误:

函数 getAllPreferences 的参数 USERNAME 是必需的,但未传入。

这是我的代码:

package Actionscript
{
    import mx.collections.ArrayCollection;
    import mx.rpc.AbstractOperation;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.remoting.mxml.RemoteObject;

    public class CFCRemote
    {
        private var ro:RemoteObject;
        private var roSource:ArrayCollection;
        private var appPointer:Object;

        // constructor
        public function CFCRemote(appMain:Object):void
        {
            appPointer = appMain;
            roSource = new ArrayCollection();
        }

        public function addSource(alias:String, source:String, thisObj:Object):void
        {
            roSource.addItem({alias:alias, source:source, thisObj:thisObj});
        }

        public function sendRequest(roAlias:String, funcName:String, args:Object = null):void
        {
            var roCaller:Object;

            ro = new RemoteObject("ColdFusion");
            ro.showBusyCursor = true;           

            for(var i:int = 0; i < roSource.length; i++)
            {
                if(roSource.getItemAt(i).alias == roAlias)
                {
                    ro.source = roSource.getItemAt(i).source;
                    roCaller = roSource.getItemAt(i).thisObj;
                    break;
                }
            }

            var ao:AbstractOperation = ro.getOperation(funcName);
            ao.arguments = args;
            ao.addEventListener(ResultEvent.RESULT, function(e:ResultEvent):void{roCaller.handleROF(e,funcName)});
            ao.addEventListener(FaultEvent.FAULT, function(e:FaultEvent):void{appPointer.server_fault(e,funcName,"unknown")});
            ao.send();

        }
    }
}

当我跟踪(args.username)时,我看到它正确传递。我在另一个脚本中尝试过,但是,该脚本中的 RemoteObject 是用 mxml 定义的。我不明白这会有什么不同。

没有想法了:(

编辑:它现在对我们有用,如果有人想使用这个解决方案并且在实现这个类时遇到问题,我很乐意提供帮助

4

2 回答 2

1

尝试将参数传递给 AbstractOperation.send() 而不是将它们设置在 AbstractOperation 上。我以前没有尝试过后者,但我已经多次将它们传递给 send() 方法,我可以毫无问题地数数。您可能需要考虑使用“... args”或作为 Array/ArrayCollection 传递 args 以确保您保持顺序。

于 2009-06-24T07:39:11.700 回答
0

好吧,我不能说我非常了解 Flex,但是您正在实例化一个抽象类这一事实确实给我带来了一些危险信号。通常你从不直接实例化抽象类——相反,它们被用作你实际实例化的类的基类。

在这种情况下,我认为您正在寻找 Operation 类。如果是这种情况,那么您可能还需要为它提供一个“argumentNames”数组 - 这似乎提供了您的参数应该传递的顺序。

于 2009-06-23T23:32:19.480 回答