Панель вкладок Apache Royale Jewel / SectionContent OnShow или событие valueCommit, как в sdk 0.9.8?

#events #tabbar #apache-royale

#Мероприятия #панель вкладок #apache-royale

Вопрос:

У меня есть что-то похожее на это :

 <j:states>
    <js:State name="login"/>
    <js:State name="loggued"/>
</j:states>
...

<j:Group includeIn="loggued" width="100%" height="100%">

   <j:TabBar localId="tabbar" width="100%"  change="ev_tab_change(event)">
        <j:beads>
            <js:ConstantBinding sourcePropertyName="tabBarDataSample" destinationPropertyName="dataProvider"/>
            <j:AssignTabContent selectedContentProperty="content">
                <j:content>
                    <j:TabBarContent width="100%" y="80" >
                        <royale:TB_One/>
                        <royale:TB_Two/>
                    </j:TabBarContent>
                </j:content>
            </j:AssignTabContent>

        </j:beads>
    </j:TabBar>

</j:Group>
  

<royale:TB_One/> и <royale:TB_Two/> являются <j:SectionContent>

Мне нужно инициировать событие, когда отображается TB_One или TB_Two или был программно изменен выбранный индекс tabbar. Я пробовал change событие на панели вкладок, но это не срабатывает при изменении с помощью SelectedIndex

Есть ли событие OnShow или valueCommit?

(на данный момент tabbar.dispatchEvent(new Event("change")); проделайте трюк при программном изменении SelectedIndex)

Используемый sdk равен 0.9.8

С уважением

Ответ №1:

вы можете сделать следующее:

 <!-- The TabBar -->
<j:TabBar initComplete="tabbarInitialized(event)"/>

...

<!-- Buttons to change the content programatically -->
<j:Button click="selectContentByIndex(0)" text="0"/>
<j:Button click="selectContentByIndex(1)" text="1"/>

...

<!-- as3 code in script -->
<fx:Script>
    <![CDATA[
        import org.apache.royale.events.Event;

        // when tabbar is initialized make tabbar listen for internal event "selectionChanged"
        // this is the event to use for programmatic changes
        public function tabbarInitialized(event:Event):void
        {
            event.target.addEventListener("selectionChanged", contentChanged);
        }

        // The button change the selection programmatically
        public function selectContentByIndex(index:int):void
        {
            tabbar.selectedIndex = index;
        }
        
        // Here run the code you want. I simply trace the new tabbat selected index and the item
        // but you can calculate the content and operate over tha visual component
        public function contentChanged(event:Event):void
        {
            trace("index:", tabbar.selectedIndex, "content:", tabbar.selectedItem);
        }
    ]]>
</fx:Script>
  

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

1. Привет, спасибо, Карлос, к сожалению, похоже, что в моем контексте в 0.9.8 это не работает. Может быть, мне нужен конкретный шарик?

2. Привет, Фред, я попробовал этот код в этом примере: royale.apache.org/using-jewel-tilehorizontallayout , и все работало правильно.