#actionscript-3 #tabs #flash-cs5 #tabbar #yahoo-astra
#actionscript-3 #вкладки #flash-cs5 #панель вкладок #yahoo-astra
Вопрос:
Мне трудно заставить панель вкладок Astra делать что-либо, кроме как передавать в мой массив dataProvider. Я пытаюсь заставить его просто отслеживать «щелчок», используя событие ИЗМЕНЕНИЯ при нажатии на вкладку. Ничего не происходит, и я не уверен, почему. У кого-нибудь есть опыт работы с этим, пожалуйста? Мой код выглядит так:
package
{
import com.yahoo.astra.fl.controls.TabBar;
import com.yahoo.astra.fl.events.TabBarEvent;
public class TabBar extends Window
{
public var tabBarGpl:TabBar;
private function displayInit():void
{
var tabBarData:Array = new Array(
"Tab one",
"Tab two",
"Tab three",
"Tab four"
);
var tabBarGpl:TabBar = new TabBar();
tabBarGpl.dataProvider = new DataProvider(tabBarData);
tabBarGpl.selectedIndex = 0;
tabBarGpl.move(-230.95, -127.65);
this.addChild(tabBarGpl);
}
private function handleEvent(event:Event):void
{
var i:int;
switch (event.type)
{
case Event.ADDED_TO_STAGE :
displayInit();
removeEventListener(Event.ADDED_TO_STAGE, handleEvent);
addEventListener(Event.REMOVED_FROM_STAGE, handleEvent, false, 0, true);
this.tabBarGpl.addEventListener(Event.CHANGE, onTabBarClick);
}
}
private function onTabBArClick(event:Event):void
{
trace("tab bar clicked");
}
}
}
И… Ничего. Я вижу панель вкладок с моими данными на 4 вкладках, но в выводе нет инструкции трассировки. Любой совет был бы полезен. Спасибо!
Ответ №1:
У меня нет опыта работы с Astra TabBar, но мне кажется, что вы изначально не вызываете свою функцию handleEvent(). Вам нужно добавить прослушиватель для него при создании экземпляра вашего класса. Если функция handleEvent() не вызывается, прослушиватель кликов никогда не добавляется, и вы не увидите клики.
public function TabBar() { //constructor function
addEventListener(Event.ADDED_TO_STAGE, handleEvent);
}
Кроме того, я не уверен, что именно вы пытаетесь сделать, но вы, похоже, добавляете новую панель вкладок к каждому экземпляру TabBar, который вы создаете.
var tabBarGpl:TabBar = new TabBar();
tabBarGpl.dataProvider = new DataProvider(tabBarData);
tabBarGpl.selectedIndex = 0;
tabBarGpl.move(-230.95, -127.65);
this.addChild(tabBarGpl);
Ключевое слово «this» здесь будет относиться к вашему экземпляру панели вкладок и может привести к тому, что этот класс будет бесконечно добавлять новые панели вкладок к существующим панелям вкладок.
Комментарии:
1. Привет, Крис, спасибо за твой ответ на мой пост. И спасибо за ваше объяснение «этого». Я этого не знал.
2. Я все еще не могу заставить эту панель вкладок работать. (Я удалил «это», чтобы очистить его.) Я добавлял, перемещал, перерабатывал EventListener для панели вкладок и следовал примеру из yahoo developer network… Похоже, что все используют эту панель вкладок в Flex, а не во Flash, поэтому документации не так много. Я сообщу, если разберусь с этим. Если у кого-то есть еще какие-либо предложения или он знает об этом, пожалуйста, помогите.
3. Теперь это работает! Но теперь у меня есть более 1 экземпляра панели вкладок, каждый из которых показывает / скрывает свое собственное количество видеороликов. Я поместил панель вкладок в видеоролик и вызвал ее с помощью: mcMain01.tabBarGpl.addEventListener(событие. ИЗМЕНИТЬ, onTabBarClick);