Динамически позиционируемые гибкие компоненты

StackOverflow https://stackoverflow.com/questions/210022

  •  03-07-2019
  •  | 
  •  

Вопрос

В моем текущем проекте (приложение Flex, которое будет запускаться в проигрывателе Flash Player) у меня есть требование отображать произвольное подмножество компонентов в форме, скрывая при этом все остальные компоненты на основе определенных аспектов состояния приложения.Существует около дюжины различных текстовых полей и раскрывающихся списков, но некоторые из них становятся неактуальными в зависимости от ранее введенных пользовательских данных, и мы не хотим отображать их, когда добираемся до этой конкретной формы.Каждый раз, когда отображается эта форма, мне может потребоваться показать любую из многих перестановок этих компонентов.

Я пытаюсь решить, как лучше всего подойти к этой проблеме.Должен ли я создать Canvas (или другой контейнер) со всеми необходимыми элементами управления, а затем просто установить видимость = false для тех, которые мне не нужны?Тогда проблема заключается в том, чтобы макет выглядел прилично.Я не хочу, чтобы там, где были бы скрытые элементы управления, оставались пробелы.

Другой вариант, о котором я подумал, - это просто механизм, который мог бы динамически создавать экземпляры TextInput или CheckBox и т. д.компонент, а затем вызвать контейнер.addChild(control), чтобы создать компоненты и не беспокоиться о проблеме пробелов.

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

Это было полезно?

Решение

Не знаю, хорошее это решение или нет, но когда я оказался в точно такой же ситуации, я воспользовался по сути вашим первым методом.Набор visible = false а также установил includeInLayout = false чтобы предотвратить те «пробелы», о которых вы говорили.Это очень простое решение, очень легко и быстро реализуемое...возможно, кто-то еще знает что-то более идиоматичное.

Другие советы

Лучший практический способ сделать это — использовать состояния.Например:

<mx:states>
    <mx:State name="State1">
        <mx:AddChild position="lastChild">
            <components.../>
        </mx:AddChild>
    </mx:State>
    <mx:State name="State2">
        <mx:AddChild position="lastChild">
            <mx:Canvas.../>
        </mx:AddChild>
        <mx:AddChild position="lastChild">
            <mx:VBox.../>
        </mx:AddChild>
    </mx:State>
</mx:states>

Затем в вашем коде вы вызываете this.currentState = «State1», чтобы включить первое состояние и т. д.Используя состояния, вы можете выборочно отображать и скрывать компоненты.

Я рекомендую поискать в Google учебные пособия по гибким состояниям и попробовать некоторые из них, чтобы получить правильное представление о том, как работают состояния.

Если штаты не подходят, ознакомьтесь со статьями, объясняющими жизненный цикл компонентов.

Если вы создадите класс, который расширяет гибкий компонент, такой как Canvas, вы определите все компоненты в функции, которая переопределяет createChildren.Вы вернетесь к макету в другой функции, которая переопределяет updateDisplayList.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top