1

プロジェクト全体で使用したいクラスがあります。基本的に、すべてのプロジェクトで RemoteObject を定義する必要がないように、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();

        }
    }
}

trace(args.username) すると、正しく渡されたことがわかります。別のスクリプトでこれを試しましたが、そのスクリプトの RemoteObject は mxml で定義されていました。これがどのように大きく異なるかわかりません。

アイデアが不足しています:(

編集: 誰かがこのソリューションを使用したいと思っていて、このクラスの実装に問題がある場合は、喜んでお手伝いします。

4

2 に答える 2

1

引数を AbstractOperation.send() に設定するのではなく、AbstractOperation.send() に渡そうとしています。私は前に後者を試したことはありませんが、問題なく数えられる回数以上 send() メソッドに渡しました。「... args」を使用するか、配列/配列コレクションとして引数を渡して、順序を維持することを検討することをお勧めします。

于 2009-06-24T07:39:11.700 に答える
0

Flex をそれほどよく知っているとは言えませんが、抽象クラスをインスタンス化しているという事実は、私にとっていくつかの危険信号を投げかけます。通常、抽象クラスを直接インスタンス化することはありません。代わりに、実際にインスタンス化するクラスの基本クラスとして使用されます。

この場合、Operation クラスを探していると思います。その場合は、「argumentNames」配列も提供する必要がある場合があります-これは、引数が渡される順序を提供しているようです。

于 2009-06-23T23:32:19.480 に答える