#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 , и все работало правильно.