Доступ к идентификатору компонента одного mxml из другого - PullRequest
0 голосов
/ 21 сентября 2009

У меня есть два mxml-файла. один из них является основным, это mxml-файл тега приложения, а другой - мой компонентный файл mxml. У меня есть основной стек в моем основном mxml, чей идентификатор, скажем, «mainViewStack». Теперь я хочу установить свойство selectedChild «mainViewStack» из моего файла компонента mxml. Но я получаю ошибку: Ошибка # 1009: невозможно получить доступ к свойству или методу пустой ссылки на объект. при доступе к mainObj.mainViewStack.selectedChild.id, где mainObj - это объект основного mxml-файла. Пожалуйста, помогите мне. Спасибо.

Ответы [ 4 ]

2 голосов
/ 22 сентября 2009

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

Попробуйте дождаться события FlexEvent.CREATION_COMPLETE в приложении, чтобы получить доступ к выбранному дочернему элементу.

1 голос
/ 24 сентября 2009

Эта проблема называется «отложенной реализацией» и является продуктом жизненного цикла компонентов Flex. Если вы хотите получить чрезвычайно подробное объяснение этой концепции, этот документ , вероятно, является лучшим из того, что я читал.

По сути Flex создает компоненты по мере необходимости. Каждый компонент имеет жизненный цикл, который проходит через этапы:

  • Строительство
  • Сложение
  • 1012 * инициализация *
  • Недействительно
  • Проверка
  • Обновление
  • Удаление

Подкомпонент не будет доступен, пока он не пройдет фазу инициализации. В этот момент Flex-компонент отправляет событие CREATION_COMPLETE, давая вам (и структуре) понять, что он готов к взаимодействию. До этого события вы будете получать null опорных ошибок при попытке доступа к компоненту или его дочерним элементам.

ViewStacks составляют это по умолчанию, не инициализируя подкомпоненты, пока они не будут вызваны для отображения. Свойство creationPolicy ViewStack по умолчанию установлено на auto . Есть несколько вариантов для этого свойства, включая все . Однако имейте в виду, что это может привести к серьезным проблемам с производительностью, поскольку все компоненты в стеке будут немедленно инициализированы независимо от того, действительно ли пользователь даже смотрит на компонент.

В вашем конкретном случае это не проблема. Компонент, содержащий стек представлений, не был полностью инициализирован. Вам необходимо установить дочерний элемент ViewStack в обработчике событий CREATION_COMPLETE.

0 голосов
/ 15 октября 2011

Вы можете использовать этот код в своем компоненте MXML, чтобы изменить выбранный дочерний элемент ViewStack приложения из другого компонента MXML. Однако это не очень хорошая практика.

FlexGlobals.topLevelApplication.mainViewStack.selectedChild = FlexGlobals.topLevelApplication.childId

Статический диспетчер событий можно использовать для отправки события из одного представления и прослушивания этого события в другом представлении.

0 голосов
/ 24 сентября 2009

или вы можете указать "creationPolicy = all", поскольку Flex создает только первого видимого дочернего элемента из стека просмотра

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