Есть ли способ иметь глобальные состояния Flex 4 (роли пользователей)? - PullRequest
1 голос
/ 17 сентября 2010

У меня проблема с гибкими состояниями в моем приложении.Я собираюсь завершить создание приложения, получить с сервера роль пользователя guest / user / superUser (на основе имени пользователя и пароля), а затем установить клиентскую часть состояния на основе этой информации.Мои классы .mxml должны включать определенные графические элементы, основанные на этом состоянии.Я сталкиваюсь с проблемами включения элементов, основанных на состояниях, определенных на прикладном уровне проекта.Я пытаюсь избежать определения состояний в каждом нужном файле .mxml.

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

Я знаю, что это возвращает текущее состояние

Application.application.currentState;

, но я хочу почти "заполнить"

<mx:states>
    <mx:State name="state1"/>
</mx:states>

каждый файл .mxml из состояний, определенных в приложении

1 Ответ

0 голосов
/ 19 сентября 2010

Если вы ищете динамические состояния - здесь - ваше решение (Первые два состояния - default и big - добавляются во время компиляции. Третье состояние Bang-a-Gong добавляется ввремя выполнения):

private function init():void {
    // Create a new state and give it a name.
    var stateBang:State = new State();
    stateBang.name = 'Bang-a-Gong';

    // Set the overrides with an array of AddChild, AddItems,
    // RemoveChild, SetEventHandler, SetProperty, and SetStyle
    stateBang.overrides =
        [ new SetProperty( btn, "label", "Bang-a-Gong" ),
          new SetProperty( btn, "height", "150" ),
          new SetProperty( btn, "width", "300" ),
          new SetStyle( btn, "fontSize", "22" ),
          new SetStyle( btn, "fontWeight", "bold" ),
          new SetStyle( btn, "color", "#FF0000" ) ];

    // Add our new state to the available states of this component.
    this.states.push( stateBang );

    // Just for kicks lets add a transition for this state.
    var transition:Transition = new Transition();
    transition.toState = 'Bang-a-Gong';

    // Create a new transition effect.
    var resize:Resize = new Resize( btn );

    // Create an composite effect, either: Sequence or Parallel.
    var sequence:Sequence = new Sequence();

    // Add our resize effect.
    sequence.addChild( resize );

    // now add our composition effect to the transition we created.
    transition.effect = sequence;

    // Push our new transition into the transitions array for this component.
    this.transitions.push( transition );
}

В другом случае, если я правильно понял, вы должны создать некоторый объект в основном приложении и получить к нему доступ из всех дочерних компонентов через FlexGlobals.topLevelApplication.

Если вы хотите изменить дочерние состояния, у вас должен быть некоторый экземпляр с уже определенными состояниями как минимум в одном месте, а затем скопировать их в дочерние компоненты, но какой смысл, если они все являются пользовательской логикой?*

Итак, дайте мне знать, если это поможет.

...