Компонент отображается в представлении «Дизайн», но не отображается при запуске приложения

Вот что происходит: у меня есть Tabnavigator со следующей вкладкой:

<s:NavigatorContent width="100%" height="100%" label="Add a logo" includeIn="loggedin">

<components:LogoSearch />

</s:NavigatorContent>

Когда я меняю состояние на «вошел в систему» ​​со следующим кодом:

protected function Login_getStateHandler(event:Event):void
        {
            this.currentState = "loggedin";
        }

navigatorContent показывает, но не компонент «LogoSearch», в представлении «Дизайн», однако он отображается, когда я переключаю состояния.

В «LogoSearch» не определены состояния, и должно отображаться...?

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

Любая идея, почему это происходит? Я вообще не профессионал в гибкости, поэтому не стесняйтесь указывать мне на мою ошибку. Спасибо.


Пробовал работать с invalidateDisplayList() и invalidateProperties(), как предложил Тяньчжэнь Линь. Все равно ничего не показывает.

<s:NavigatorContent width="100%" height="100%" label="Add a logo" includeIn="loggedin" id="AddLogoTab" >

    <s:Label text="test" id="test" />

</s:NavigatorContent>

И :

protected function Login_getStateRegisterHandler(event:Event):void
        {
            this.currentState = "register";
            test.invalidateDisplayList();
            test.invalidateProperties();
            test.validateNow();

            AddLogoTab.invalidateDisplayList();
            AddLogoTab.invalidateProperties();
            AddLogoTab.validateNow();
        }

Что бы я ни делал, содержимое NavigatorContent не будет отображаться после изменения состояния.


person user1315134    schedule 11.08.2012    source источник


Ответы (1)


Чтобы сузить круг проблем, которые у вас есть, вы можете начать с удаления includeIn="loggedin" из своего кода, это, по крайней мере, обеспечит правильное отображение вашего компонента.

Затем я бы поставил точку останова на вашу функцию Login_getStateHandler и посмотрел, вызывается ли она вообще. Если нет, то где-то в вашей проводке обработчик не вызывается. Вы можете опубликовать больше кода здесь, чтобы получить помощь.

person Tianzhen Lin    schedule 11.08.2012
comment
Спасибо за ответ. Вызывается «Login_getStateHandler», и состояние действительно меняется, элемент с «includeIn=loggedin» отображается из-за изменения состояния, но компонент внутри него не отображается. Я бы не знал, какой другой код был бы полезен, поскольку состояние действительно меняется (нет необходимости публиковать код, который заставляет это происходить?), И в компоненте LogoSearch не определены состояния. Если у вас есть идея, какой код я должен показать, пожалуйста, скажите мне. Спасибо еще раз. - person user1315134; 11.08.2012
comment
Возможно, вы захотите назначить свойства ширины и высоты компонента и посмотреть, правильно ли они отображаются. В зависимости от того, как написан компонент, иногда он может быть не в состоянии установить необходимую ширину и высоту. Вы также можете добавить метку с текстом в NavigatorContent и посмотреть, появится ли она. Если ничего не отображается, это означает, что ViewStack неправильно выбрал NavigatorContent. В этом случае могут пригодиться invalidateDisplayList() и invalidateProperties(). - person Tianzhen Lin; 11.08.2012
comment
Спасибо за ответ, звучит многообещающе. Я попытался заменить компонент меткой, но метка тоже не отображалась. - person user1315134; 12.08.2012
comment
Вы размещаете свой NavigatorContent внутри mx:ViewStack? Если это так, то, скорее всего, в вашем ViewStack не выбрано NavigatorContent. - person Tianzhen Lin; 12.08.2012