2009-03-22 1 views
0

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

viewstack1 
    canvasPeople 
     datagridPeople 
    canvasDetails 
     tabNavigator1 
     canvasPersonDetail 
      txtLastname 
     canvasPersonOptions 
      comboboxOccupation 

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

ответ

2

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

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

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

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

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

Будьте осторожны с этим, хотя: Flex выбрал AUTO по умолчанию для причины. Если ваше приложение растет, время инициализации при созданииPolicy = все будет большим.

1

Создание подкомпонентов контролируется свойством creationPolicy. Он подробно описан на странице документации Flex 3: "About the creationPolicy property".

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

Смежные вопросы