PDA

Просмотр полной версии : Некорректная работа state


zigfridus
10.02.2012, 12:53
Добрый день.
2-й день вожусь с mxml и не могу найти ошибку.
Есть большой mxml. Привожу его частично, если будет нужно, то покажу остальное.

<?xml version="1.0" encoding="utf-8"?>
<s:NavigatorContent xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:cookbook="cookbook.*"
minWidth="1200" minHeight="850" >

<s:states>
<s:State name="admins"/>
<s:State name="guests"/>
</s:states>

<s:VGroup id="rightGroup" horizontalAlign="left" verticalAlign="middle">
<mx:Accordion id="accordion" width="340" height="490">
<s:NavigatorContent width="100%" height="100%" label="Фильтр" includeIn="admins">
.............
.............
.............
</s:NavigatorContent>

<s:NavigatorContent width="100%" height="100%" label="Контент 1">
.............
.............
.............
</s:NavigatorContent>

<s:NavigatorContent width="100%" height="100%" label="Контент 2">
.............
.............
.............
</s:NavigatorContent>

<s:NavigatorContent width="100%" height="100%" label="Контент 3">
.............
.............
.............
</s:NavigatorContent>
</mx:Accordion>
</s:VGroup>
</s:NavigatorContent>


Проблема заключается в том, что компонент NavigatorContent под названием "Фильтр" не отображается ни в одном состоянии, включая состояние "admins". Экспериментировал - подставлял includeIn="admins" в различные компоненты (к примеру в Accordion или VGroup), в них состояние работает корректно. Но, если подставлять в любой компонент NavigatorContent, то он не отображается ни в одном состоянии.

Может кто-то с чем-то подобным сталкивался? Подскажите, как проблему решить?

wvxvw
10.02.2012, 14:31
http://bugs.adobe.com/jira/browse/SDK-28020 - говорят, что пофиксили, я не проверял. В любом случае не стал бы пользоваться стейтами, да и MXML бы не использовал :)

zigfridus
10.02.2012, 15:38
Похоже указанный баг пофиксили. Запустил у себя вложенный в описание бага mxml и он отработал без ошибок.
Моя проблема похожа на эту. В моем случае содержимое NavigatorContent находится на вкладке, которая по-умолчанию при запуске приложения скрыта. При этом абсолютно аналогичное содержимое на вкладке, открываемой по-умолчанию со стейтами работает корректно. Пробовал присвоить каждому NavigatorContent свой id - это в описание бага указано, как временное решение, но не помогло.

http://bugs.adobe.com/jira/browse/SDK-28020 - говорят, что пофиксили, я не проверял. В любом случае не стал бы пользоваться стейтами, да и MXML бы не использовал :)

А как же во Flex без стейтов? Я при их помощи разграничиваю доступ к приложению...

Добавлено через 4 часа 42 минуты
Люди, подскажите, что нужно сделать, чтобы состояния корректно заработали?
Программу уже сдавать надо и только с этими состояниями затык вышел :(

wvxvw
11.02.2012, 20:59
Ну, что сделать... переопределить set currentState и самому реализовать чего там показывать или скрывать.
А по поводу стейтов - ну так во флексе они реализованы через многоточие... Смысл стейта заключается в том, чтобы отделить часть кода, которая выполняется в определенной ситуации от части кода, которая выполняется в другой - чтобы они вообще не пересекались, и чтобы не писать кучу ифов. Флекс, естесственно, все делает наоборот - создает невнятную кашу, в которой потом уже не разобраться. Вот только если бы это была единственная вещь сделаная во флексе через многоточие...

zigfridus
13.02.2012, 13:01
Ну, что сделать... переопределить set currentState и самому реализовать чего там показывать или скрывать.
А по поводу стейтов - ну так во флексе они реализованы через многоточие... Смысл стейта заключается в том, чтобы отделить часть кода, которая выполняется в определенной ситуации от части кода, которая выполняется в другой - чтобы они вообще не пересекались, и чтобы не писать кучу ифов. Флекс, естесственно, все делает наоборот - создает невнятную кашу, в которой потом уже не разобраться. Вот только если бы это была единственная вещь сделаная во флексе через многоточие...

Извиняюсь возможно за дурацкий вопрос (это моя 1-я программа на Флексе), но где именно переопределяется set currentState?

Добавлено через 2 часа 0 минут
Разобрался...это я дурак :wacko: :(

Вместо того, чтобы использовать в <mx:TabNavigator> в качестве закладок <mx:VBox>, я использовал <s:NavigatorContent>. Поменял везде на <mx:VBox> и состояния заработали корректно.

Спасибо за помощь :)