Flex / Actionscript: передача данных из пользовательского класса в основное приложение? - PullRequest
0 голосов
/ 04 августа 2011

Хорошо, это звучит глупо, но я полный новичок в программировании на Flex.

У меня есть приложение с основным файлом .mxml и определенным классом Foo, который я вызываю из .mxml

В Foo я создаю URLRequest и слушаю событие Complete.Затем я обнаружил, что возвращаю данные в функции Foo, но не знаю, как передать их в часть приложения .mxml!Я посмотрел на ArrayCollections, но я не могу понять, как они работают и может ли это помочь.Разве нет способа изменить внутри класса переменную с глобальной областью действия?

Ответы [ 5 ]

2 голосов
/ 05 августа 2011

Это звучит как маленькое приложение, но если это большое приложение, вы можете посмотреть на микро-фреймворк, например RobotLegs

Если у вас есть класс Foo, расширяющий EventDispatcher, тогда онсможет отправлять события и заставлять основное приложение MXML прослушивать указанные события.

package com.example
{
    import flash.events.EventDispatcher;
    import com.example.events.MyEvent;

    public class Foo extends EventDispatcher 
    {
        public function doAction():void 
        {
            var someData:String = "blah";
            dispatchEvent(new MyEvent(MyEvent.SOMETHING_HAPPENED, someData));
        }
    }
}

Пользовательское событие с полезной нагрузкой (в данном случае строка)

package com.example.events 
{
    import flash.events.Event;

    public class MyEvent extends Event 
    {
        static public const SOMETHING_HAPPENED:String = "somethingHappened";

        private var _myData:String;

        public function get myData():String 
        {
            return _myData;
        }

        public function MyEvent(type:String, myData:String, bubbles:Boolean=false, cancelable:Boolean=false) 
        {
            _myData = myData;
            super(type, bubbles, cancelable);
        }

        override public function clone():Event 
        {
            return new MyEvent(type, myData, bubbles, cancelable);
        }
    }
}

Работа сваш класс Foo из основного файла:

public function EventDispatcherExample() {
    var foo:Foo = new Foo();
    foo.addEventListener(MyEvent.SOMETHING_HAPPENED, actionHandler);
    foo.doAction();
}

private function actionHandler(e:MyEvent):void {
    trace("my data is: " + e.myData);
}
1 голос
/ 04 августа 2011

Ваш класс Foo может отправлять событие и иметь что-то в вашем файле main.mxml для прослушивания этого события.Я уверен, что я мог бы создать пример.Я думаю, что это под событиями клиента в документации Flex.Это при условии, что я понимаю вопрос.

1 голос
/ 05 августа 2011

Как сказал Джон, событие - ваш лучший выбор.

Если вам нужен пример кода, я предоставил его для аналогичного вопроса: Данные из всплывающего окна в основное приложение?

1 голос
/ 04 августа 2011
import mx.core.FlexGlobals;
FlexGlobals.toplevelApplication.varName;
0 голосов
/ 05 августа 2011

Событие может быть лучшим способом сделать это, как было заявлено. Другой подход - отправить событие вроде этого

.
dispatchEvent(new Event('somethingHappened'));

, а также создайте метод get в своем классе для данных, которые вам нужно получить.

Тогда все, что вам нужно сделать в своем основном приложении, это

var foo:Foo = new Foo();
foo.addEventListener('somethingHappened', actionHandler);

private function actionHandler(e:Event):void 
{
    trace(foo.memberData);
}

Этот способ может быть более подходящим, если данные в любом случае должны быть членами класса и если вы хотите избежать создания нового класса событий.

...