2009-06-23 23 views
1

我有一個我想在整個項目中使用的類。它基本上可以讓我輕鬆地使用RemoteObject,這樣我就不必在整個項目中定義它。它在不傳遞「args」到sendRequest(..)時有效。但是,當我想調用帶參數的CFC功能,並嘗試通過「ARGS」在我得到以下錯誤:Flex 3動態RemoteObject類

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

繼承人我的代碼:

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.send(),而不是將它們設置爲AbstractOperation。我之前沒有嘗試過後者,但我已經將它們傳遞給了send()方法多次,以便我可以毫無問題地進行計數。您可能需要考慮使用「... args」或Array/ArrayCollection來傳遞參數,以確保您維護訂單。

+0

謝謝,使用ao.send(args)工作。 – 2009-06-24 12:32:09

0

嗯,我可以」我說我非常瞭解Flex,但是實例化一個抽象類的事實的確爲我提供了一些紅旗,通常你不會直接實例化抽象類 - 相反,它們被用作實際實例化類的基類

在這種情況下我認爲你正在尋找操作類。如果是這種情況,那麼你可能還需要提供一個「argumentNames」數組 - 這似乎提供了應該傳遞參數的順序。