Как динамически установить текущую страницу в flexbook?

#actionscript-3 #apache-flex #flex4 #flex4.5

#actionscript-3 #apache-flex #flex4 #flex4.5

Вопрос:

Я использую Flexbook, который содержит 2 BorderContainer. Код показан ниже

 <controls:FlexBook id="book" x="20" y="20"
               width="100%" height="100%" horizontalCenter="0" 
               animateCurrentPageIndex="true"
               showCornerTease="true" animatePagesOnTurn="true" 
               activeGrabArea="edge"
               edgeAndCornerSize="20" 
               hardbackPages="false"
               hardbackCovers="false"
               pageShadowStrength="1"
               curveShadowStrength="1"
               pageSlope="0"
               itemSize="page"
               backgroundColor="0xC3D1D9"
               borderThickness="0"
               borderColor="0xC3D1D9"
               cover="{null}"
               backCover="{null}"
               showPageSlopeAtRest="false" 
               cacheAsBitmap="true">

<s:BorderContainer id="page1">


    <mx:ColumnChart x="0" y="35" id="ccMain" height="90%" width="99%"
                    cacheAsBitmap="true"
                    showDataTips="true"  dataTipFunction="{getDataTip}"  type="clustered" backgroundElements="{bge4}">
            <!-- column chart code goes here -->
    </mx:ColumnChart>

</s:BorderContainer>


<s:BorderContainer id="page2" creationComplete="productMainPg2.addElement(lineChart)">
    <mx:Legend dataProvider="{lineChart}" height="21" x="10" width="95%" color="#b1b7f4"/>
</s:BorderContainer>
  

Этот код показывает страницу 1 как текущую страницу. Я хочу динамически отображать BorderContainer (id = page2) в качестве моей текущей страницы при нажатии кнопки.Я попытался установить currentPageIndex = 1, но при этом я получаю пустую страницу.

Комментарии:

1. Что такое FlexBook и почему вы не можете найти ответ через их API или форумы?

2. Доступна функция turnToPage(index:int). Но я не могу отключить перелистывание страницы. т.е. я хочу перейти на определенную страницу (page2) и отключить перелистывание страниц.

Ответ №1:

  1. Создайте логическое свойство [связываемое] (т.е. [Bindable] public var isShowingFirstPage:Boolean = true )
  2. Установите свойства BorderContainer «visible» и «includeInLayout» в зависимости от этого значения. (т.е. … id="page1" visible="{isShowingFirstPage:Boolean}" includeInLayout="{isShowingFirstPage:Boolean} … для первого и … id="page2" visible="{!isShowingFirstPage:Boolean}" includeInLayout="{!isShowingFirstPage:Boolean} … для второго)
  3. переключать / изменять это логическое значение на основе некоторого ввода, жеста пользователя, бизнес-логики, чего угодно, и два контейнера должны отображаться / обновляться соответствующим образом.

Комментарии:

1. Я пробовал это, но все это скрывается вместо отображения следующей страницы.

2. Можете ли вы обновить и показать свой код, как это выглядит? Также какую кодовую базу вы используете для FlexBook? Это из «rubenswieringa»?

3. Без знания вашего кода это сложно, но я вижу свойство «animateCurrentPageIndex». Попробуйте изменить это значение на «false», а затем увеличить новое свойство «currentPageIndex». Не забудьте вернуть «animateCurrentPageIndex» обратно в true!

4. с помощью turnToPage(index:int, animate:boolean) Я могу перейти на определенную страницу. Я хочу, чтобы пользователь не мог перевернуть страницу, как только он перешел на эту конкретную страницу. Я пытался выполнить book.enabled = false, но здесь это не работает.

5. Затем, основываясь на любом пользовательском жесте, вызывающем метод turnToPage (т. Е. MouseEvent.CLICK), Просто оберните условие, чтобы проверить и посмотреть, посещал ли пользователь уже эту страницу. Если они этого не сделали, то вызовите метод с соответствующими аргументами. В противном случае не вызывайте их метод. Похоже, это проблема бизнес-логики.