Метод initialize () или creationComplete () не вызывается при повторном посещении страницы во Flex - PullRequest
0 голосов
/ 17 декабря 2010

В моем приложении Flex я использую свойство viewstack.selectedchild (), чтобы изменить представления.

При повторном просмотре представлений с помощью свойства viewstack.selectedchild () метод инициализации не вызывается.

Любая помощь приветствуется.

Ответы [ 5 ]

2 голосов
/ 17 декабря 2010

Объект уже создан, поэтому он не выполняет повторную инициализацию, он уже находится в памяти (что по большей части хорошо). В любом случае, вы хотите прослушать изменения в выбранном дочернем элементе стека представлений, просто добавьте к нему прослушиватель и выполняйте свою логику, если хотите, чтобы каждый раз при изменении представления. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/containers/ViewStack.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2#event:change в качестве альтернативы вы, вероятно, можете использовать событие show внутри объекта, находящегося в стеке представлений, чтобы получить событие, когда оно меняется с невидимого на видимое.

1 голос
/ 16 апреля 2012

Событие show () компонента отправляется при переходе от невидимого к видимому, поэтому следующий код НЕ работает для компонента, содержащегося в стековом представлении

<s:NavigatorContent id="view1" label="view1">
 <views:view2 show="showHandler(event)"/>
</s:NavigatorContent>

В компоненте ViewStack простойДля управления событием изменения необходимо использовать следующий MXML

<mx:ViewStack id="viewStack" change="onViewStackChange(event)">
 <s:NavigatorContent id="view1" label="view1_lbl">
  <views:view1 name="v1"/>
 </s:NavigatorContent>
 <s:NavigatorContent id="view2" label="view2_lbl">
  <views:view2 name="v2"/>
 </s:NavigatorContent>
</mx:ViewStack>

с этим кодом ActionScript.

protected function onViewStackChange(event:IndexChangedEvent):void
{
    // alert label of selected nav content
    Alert.show("View Stack Change, Selected  = " + viewStack.selectedChild.label);

    // get selected nav content then show name of first child
    var navContent: NavigatorContent = (viewStack.selectedChild as NavigatorContent);
    Alert.show( "Change, 1st child is: " + navContent.getChildAt(0).name ); 
}

. Вы можете различать несколько компонентов по меткам

Cheers

1 голос
/ 17 декабря 2010

У меня все еще слишком мало информации, чтобы полностью ответить на вопрос, какова конечная цель, чтобы иметь стек просмотра на сцене и знать, когда выбранный индекс изменился, просто сделайте это так:

<mx:ViewStack id="viewstack" width="100%" height="100%" change="changeHandler(event)">
    <s:NavigatorContent id="view1" label="view1">
    <views:view1 />
    </s:NavigatorContent>
<s:NavigatorContent id="view2" label="view2">
    <views:view2 />
</s:NavigatorContent>
</mx:ViewStack>

в функции changeHandler вы можете использовать свойство event.selectedIndex, чтобы узнать, какой из элементов отображается прямо сейчас ... или же вы можете посмотреть на свойство view1.visible.Вы можете программно изменить отображаемый объект, выполнив viewStack.selectedIndex = 0 или viewStack.selectedChild = view1.

Также, если вы хотите знать, что внутри компонента (например, в mxml view1) вы можете использовать свойство showтакие как:

<views:view2 show="showHandler(event)"/>
1 голос
/ 17 декабря 2010

Чтобы ответить на ваш конкретный вопрос, по умолчанию каждое представление будет инициализировано и инициализировано один раз, когда они будут первоначально показаны (то же самое с завершением создания.) После этого переключение между представлениями не приведет к их повторной инициализации. Если вы хотите выполнять какие-либо действия при изменении выбранного представления, вы должны присоединить слушатель к вашему ViewStack для события mx.events.IndexChangedEvent.CHANGE. Также было бы полезно узнать больше о жизненном цикле гибкого компонента (который включает в себя инициализацию). Вот диаграмма, которую я нашел полезной: http://danorlando.com/?p=122

Надеюсь, это поможет.

0 голосов
/ 17 декабря 2010

main.mxml

<mx:ViewStack id="viewstack" width="100%" height="100%">
    <s:NavigatorContent id="view1" label="view1">
    <views:view1 />
    </s:NavigatorContent>
<s:NavigatorContent id="view2" label="view2">
    <views:view2 />
</s:NavigatorContent>

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