Глобальная переменная в Flex - PullRequest
2 голосов
/ 11 августа 2011

Я пытаюсь работать с глобальной переменной во Flex, и она не работает правильно.

В моем файле mxml по умолчанию я объявляю следующее

           public var appID:int;

Эта переменная отслеживает идентификатор сеанса в моем приложении для целей SQL. На другой странице mxml я вызываю следующий код, который должен обновить глобальную переменную до текущего идентификатора.

                // Get the ID
            sqlStatement.text =
                "SELECT Max(id)FROM applications";
            sqlStatement.execute();

            var result:SQLResult;

            result = sqlStatement.getResult();
            FlexGlobals.topLevelApplication.appID = result.data[0];

Наконец, я запускаю запрос на обновление SQL, используя идентификатор в качестве параметра. Моя проблема в том, что FlexGlobals.topLevelApplication.appID всегда равен 0, по какой-то причине глобальная переменная никогда не обновляется, я проверил, чтобы result.data [0] был правильным, но значение никогда не передавалось в глобальную переменную. 1009 *

Кто-нибудь видит, что я могу здесь делать неправильно? или у кого-нибудь есть лучшее предложение для отслеживания идентификатора через мое приложение?

Спасибо за любую помощь заранее!

Ответы [ 3 ]

9 голосов
/ 11 августа 2011

Мне нравится создавать класс "Globals" со статическими переменными:

package {
    public class Globals {
        public static var APP_ID:int;
    }
}

затем получите доступ к нему в другом классе с помощью:

Globals.APP_ID = result.data[0];
1 голос
/ 28 марта 2014

Когда я начал, я обнаружил, что смесь mxml и AS3 с настройками Zend Framwork, php и WAMP немного устрашала, и изо всех сил пытался смириться с Flex как средой программирования.Использование глобальных переменных немного облегчило эту боль.

Способ, который работал для меня ... хотя я уверен, что могут быть лучшие примеры, есть следующее:

Сначала создайте класс Globals

package
{
    public class Globals
    {
    [Bindable] public var name                      : String;
    [Bindable] public var email                     : String;
    [Bindable] public var lecturersResult           : CallResponder;
    [Bindable] public var studentsResult            : CallResponder;

    [Bindable] public var datagrid_lecturers        : DataGrid;
    [Bindable] public var dropDownList_lecturerid   : DropDownList;
    [Bindable] public var DatabaseTables            : Accordion;    
    [Bindable] public var lectAdd                   : Button;

    // auto generated classes by Zend Framework, where references are setup here

    [Bindable] public var lecturers                 : Lecturers;
    [Bindable] public var students                  : Students;

        public function Globals()
        {
        // variables initialised

            name                = "";
            email               = "";
            lecturersResult             = new CallResponder();
            studentsResult              = new CallResponder();
            lectAdd                     = new Button();
            dropDownList_lecturerid     = new DropDownList();
            datagrid_lecturers          = new DataGrid();
            DatabaseTables              = new Accordion();

            lecturers                   = new Lecturers();
            students                    = new Students();
        }

        // also useful when creating functions used between classes.

        public function func1()
        {
        }
        public function func2()
        {
        }
        public function func3()
        {
        }
    }
}

в основном файле mxml проекта я объявил экземпляр класса Globals

public var g:Globals = new Globals();

фрагмент кода mxml, используя новый экземпляр

<s:DataGrid id="datagrid_lecturers" x="10" y="10" width="860" height="300" editable="true" fontSize="12" requestedRowCount="4"
                creationComplete="g.lecturersService.datagrid_lecturers_creationCompleteHandler(event,g,datagrid_lecturers,btnAddLecturer,btnDeleteLecturer,btnUpdateLecturer)" 
                selectionChange="g.lecturersService.datagrid_lecturers_selectionChangeHandler(event,g)">

Другой пример ...

g.lecturersResult.token = g.lecturersService.getAllLecturers();

Оборотная сторона, я ношу с собой много багажа, вероятно, более обязательного, чем необходимо.Пока база данных мала, все будет работать нормально.Пуристам не понравится этот подход.Gloabls часто называют плохой практикой программирования ... что я согласен, но для начинающих ... это не плохой путь.Хорошие порограммы могут появиться позже, когда вы станете лучше / умнее при кодировании в этой среде.

0 голосов
/ 11 августа 2011
public var appID:int;

appID будет 0, пока вы не назначите ему что-то еще.

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