Проблемы с передачей функций в flex / actionscript 3 - PullRequest
0 голосов
/ 21 января 2010

Я новичок в flex и создаю класс-оболочку для объекта WebService, чтобы сделать мой основной код более чистым mxml. Я пытаюсь передать функцию в метод класса, чтобы установить в качестве обработчика события результата для вызова soap, и она не работает должным образом.

Вот класс:

package
{
    import mx.rpc.events.ResultEvent;
    import mx.rpc.soap.WebService;

    public class WebServiceObject
    {
        private var wsdl:String = "http://localhost:8080/WebApplication1/TestWs?wsdl";
        private var testWs:WebService;

        public function WebServiceObject()
        {
            try {
                testWs = new WebService(wsdl);
                testWs.loadWSDL();
            } catch(errObject:Error) {
                trace(errObject.toString());
            }
        }

        public function getSomething(resultHandler:Function):void
        {
            testWs.getSomething.addEventListener(ResultEvent.RESULT, resultHandler);
            testWs.getSomething.send();
        }
    }
}

Это mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
    <![CDATA[
        import WebServiceObject;
        import mx.rpc.events.ResultEvent;
        import mx.controls.Alert;

        private function test():void
        {
            var test:WebServiceObject = new WebServiceObject();
            test.getSomething(handler);
        }

        public function handler(event:ResultEvent):void
        {
            trace(event.result);
        }

    ]]>
</mx:Script>
<mx:Button label="Test" click="test();"/>
</mx:Application>

Вызов веб-службы запущен, и вызов прекращается, но результат не возвращается слушателю события. Я попытался использовать метод класса в качестве обработчика и получил тот же результат. Все части работают, если они находятся в теге mxml code.

Это выполнимо? Я что-то упустил?

Спасибо.

EDIT:

ОК, видимо (это не сработало):

testWs = new WebService(wsdl);
testWs.loadWSDL();

- не то же самое, что (это сработало, обратите внимание, куда передается URL-адрес wsdl):

testWs = new WebService();
testWs.loadWSDL(wsdl);

и я был совершенно уверен, что пробовал оба пути ... в любом случае проблема решена.

1 Ответ

1 голос
/ 21 января 2010

Это должно работать от внешнего вида вещей. Возможно, объект WebServiceObject собирается перед сборкой события? Попробуйте сохранить его в переменной уровня класса. Это кажется странным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...