2009-06-23 19 views
1

私は自分のプロジェクト全体で使いたいクラスを持っています。基本的に私はRemoteObjectを使って簡単に作業できるので、すべてのプロジェクトで定義する必要はありません。これは、 "args"をsendRequest(..)に渡さないときに機能します。しかし、私は、パラメータを持つCFC関数を呼び出すと、「引数」を渡してみたいとき、私は次のエラーを取得するには:Flex 3 Dynamic RemoteObjectクラス

The parameter USERNAME to function getAllPreferences is required but was not passed in.

HERESに私のコード:

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で定義されていました。これがどう違うのか分かりません。

アイデア:(の不足

編集:それは誰もがこのソリューションを使用したい場合は、今私たちのために働いていると、このクラスを実装する問題を持っている私は喜んでお手伝いします

答えて

1

引数をAbstractOperationに設定するのではなく、AbstractOperation.send()に渡そうとしています。私は以前は後者を試していませんが、私はsend()メソッドにそれらを渡して何度も問題なく数えることができます。 "... args"を使用してargsを渡すか、配列を確実に維持するためにArray/ArrayCollectionとして渡すことを検討してください。

+0

ao.send(args)を使用していただきありがとうございます。 –

0

まあ私ができます」あなたが抽象クラスをインスタンス化しているという事実は私にとって赤旗を投げてしまいます。通常、抽象クラスを直接インスタンス化することはありません。実際にインスタンス化するクラスの基本クラスとして使用されます。

このケースでは、私はだと思います。でOperationクラスを探しています。その場合、引数に "argumentNames"配列を指定する必要があります。これは、引数を渡す順序を提供するようです。

関連する問題