Когда элементы управления во Flex становятся адресуемыми? - PullRequest
0 голосов
/ 22 марта 2009

У меня проблемы с Flex в связи с изменением элементов управления на разных панелях стека. Во время выполнения некоторые элементы управления недоступны и возвращаются как нулевые. Вот пример структуры:

viewstack1
   canvasPeople
      datagridPeople
   canvasDetails
      tabNavigator1
         canvasPersonDetail
             txtLastname
         canvasPersonOptions
             comboboxOccupation

У меня есть обработчик "click" в datagrid1, настроенный на активацию canvasB (viewstack1.selectedChild = canvasB) и блок опций детализации (tabNavigator1.selectedChild = canvasPersonOptions). Первый работает нормально, но второй возвращает ошибку о доступе к нулевому объекту, потому что в тот момент, когда пользователь щелкает элемент в сетке данных People, tabNavigator1 имеет значение null, как и любой элемент управления под ним. (хотя его родительский объект (canvasDetails) является адресуемым.) В настоящее время это крошечное приложение, поэтому не похоже, что оно ожидает загрузки элементов. Есть ли способ управления тем, как Flex отображает элементы управления, чтобы они были доступны до того, как пользователь их увидит? Я не знаю, относится ли это к элементу управления viewStack.

Ответы [ 2 ]

2 голосов
/ 22 марта 2009

Да, это называется «политикой создания», и это свойство всех классов-контейнеров. Чтобы сделать то, что мы ищем, вы можете использовать политику создания «все»; "Авто" является значением по умолчанию.

A creationPolicy of ContainerCreationPolicy.AUTO означает, что контейнер откладывает создание некоторых или всех потомков до тех пор, пока они не потребуются, процесс, который называется отложенным созданием экземпляра. Эта политика обеспечивает лучшее время запуска, поскольку изначально создается меньше компонентов UIComponents. Однако это приводит к задержкам навигации, когда пользователь впервые переходит на другие части приложения. Контейнеры навигатора, такие как Accordion, TabNavigator и ViewStack, реализуют политику ContainerCreationPolicy.AUTO, немедленно создавая все их дочерние элементы, но ожидают создания более глубоких потомков дочернего элемента, пока он не станет выбранным дочерним элементом контейнера навигатора.

A creationPolicy of ContainerCreationPolicy.ALL означает, что контейнеры навигатора немедленно создают более глубоких потомков для каждого дочернего элемента, а не ожидают, пока этот дочерний элемент не будет выбран. Для контейнеров с одним представлением, таких как контейнер VBox, нет различий между политиками ContainerCreationPolicy.AUTO и ContainerCreationPolicy.ALL.

Больше информации здесь:

http://livedocs.adobe.com/flex/3/html/layoutperformance_04.html

Будьте осторожны с этим: Flex выбрал АВТО по умолчанию по причине. Если ваше приложение станет большим, время инициализации в creationPolicy = all будет большим.

1 голос
/ 22 марта 2009

Создание подкомпонентов контролируется свойством creationPolicy. Это подробно описано на странице документации Flex 3 «О свойстве creationPolicy» .

Если вы установите для свойства значение «all», каждый подкомпонент контейнера ViewStack будет создан сразу после создания ViewStack. То же самое работает для TabNavigator. Конечно, это может иметь некоторые последствия для производительности, которые также описаны в документации.

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