Flex 3 Dynamic RemoteObject Class - PullRequest
1 голос
/ 24 июня 2009

У меня есть класс, который я хочу использовать в своих проектах. По сути, это позволило бы мне легко работать с RemoteObject, чтобы мне не приходилось определять его во всех моих проектах. Это работает, когда не передает «args» sendRequest (..). Но когда я хочу вызвать функцию cfc с параметрами и попробовать передать «args», я получаю следующую ошибку:

Требуется параметр USERNAME для функции getAllPreferences но не был передан.

Вот мой код:

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. Я не понимаю, как это будет сильно отличаться.

Закончились идеи: (

Редактировать: Сейчас это работает для нас, если кто-то захочет использовать это решение и возникнет проблема с реализацией этого класса, я с радостью помогу

Ответы [ 2 ]

1 голос
/ 24 июня 2009

Попытка передачи аргументов в AbstractOperation.send () вместо установки их в AbstractOperation. Я не пробовал последнее раньше, но я передавал их методу send () чаще, чем могу сосчитать без проблем. Вы можете рассмотреть возможность передачи аргументов, используя «... args» или как Array / ArrayCollection, чтобы обеспечить поддержание порядка.

0 голосов
/ 24 июня 2009

Ну, я не могу сказать, что ужасно хорошо знаю Flex, но тот факт, что вы создаете экземпляр абстрактного класса, вызывает у меня некоторые красные флажки. Обычно вы никогда напрямую не создаете экземпляры абстрактных классов - вместо этого они используются в качестве базовых классов для классов, которые вы фактически создаете.

В этом случае я думаю , что вы ищете класс Операции. Если это так, то вам также может потребоваться предоставить ему массив «argumentsNames» - это, кажется, обеспечивает порядок, в котором должны передаваться ваши аргументы.

...