Гибкая и фальшивая инициализация Mxml без фактического показа компонента (более настойчиво) - PullRequest
0 голосов
/ 26 февраля 2009

У меня есть класс TitleWindow mxml, который имеет несколько компонентов и слушателей. В его состоянии creationComplete и init я добавляю несколько слушателей, которые слушают события в его графическом интерфейсе.

Это TitleWindow отображается только тогда, когда пользователь нажимает «кнопку», я сделал TitleWindow синглтоном со следующим кодом:

public static function getInstance():MyWindow
{
    if ( MyWindow.singleton )
    {
        return MyWindow.singleton;
    }
    else{
        MyWindow.singleton = new MyWindow();
        return MyWindow.singleton;
    }            
}

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

Проблема заключается в следующем для некоторых специальных внешних событий, которые мне нужны, чтобы «изменить» некоторых слушателей (удалить слушателей и добавить новых) на кнопку из MyWindow, прежде чем она была хотя бы однажды показана.

У меня все еще есть MyWindow.getInstance () в памяти, когда мое приложение запускается. Однако добавление / удаление слушателей, кажется, не имеет никакого эффекта, если он не произвел фактического рендеринга компонентов, событие при использовании следующего кода при запуске приложения.

  myWindow= MyWindow.getInstance();
  myWindow.initialize();

Неудивительно, что если я "покажу" ("выполню") myWindow хотя бы один раз, тогда изменения событий в экземпляре myWindow будут работать отлично.

Как я могу подделать полную инициализацию этого компонента, не показывая его при запуске?

Спасибо!

1 Ответ

2 голосов
/ 26 февраля 2009

Какой контейнер содержит вашу кнопку? Если вы используете Multiple View Container , вы можете попробовать установить creationPolicy на all. Контейнеры с одним представлением создайте всех своих детей за один раз, и вам не придется сталкиваться с этой проблемой.

Из документов Flex 3.0 я могу получить это:

Политикой создания по умолчанию для всех контейнеров, кроме контейнера приложения, является политика родительского контейнера. Политика по умолчанию для контейнера приложения - auto.

Это похоже на причину всех ваших неприятностей.

Обновление: Я не упоминал об этом раньше, так как думал, что этого следовало ожидать :) Установка creationPolicy в all делает ваше приложение загружаться медленнее. Итак, прочитайте Ordered Creation - этот метод поможет вам выбрать, отображать ли все элементы управления за один раз (это поведение по умолчанию после создания всех элементов управления) или пошагово -шаг, как и когда они создаются.

...