Одним из распространенных способов передачи данных между объектами является отправка пользовательских событий. Это имеет преимущество уменьшения зависимости между классами. Скажем, например, что вы хотели добавить класс «Напитки» в свою структуру, если все классы связаны друг с другом, может оказаться сложным обновить ваше приложение. С другой стороны, в случае событий вы можете либо создать новое CustomEvent, либо добавить свойство напитков в текущее событие, вероятность чего-то сломаться более ограничена.
Практически вам понадобится диспетчер событий, который будет отправлять и получать события, а затем информировать соответствующий объект.
Вот широкий пример:
Возьмите каждый пакет и сохраните их в своем файле, присвоив ему имя класса с расширением .as (например, Main.as). Все файлы должны находиться в одной папке. Main.as будет вашей точкой входа, если вы используете Flash CS, это будет ваш класс документов.
Потратьте время на ознакомление с некоторыми учебниками по AS3, хотя я часто даю этот совет, поскольку он избавит вас от головной боли и затрат времени на решение основных проблем. Воспользуйтесь, например, учебным пособием по выходным сценариям Колина Мука, которое вы найдете на Adobe TV.
package
{
import flash.display.Sprite;
import flash.events.EventDispatcher;
public class Main extends Sprite
{
private var dispatcher:EventDispatcher;
private var salads:Categories;
private var menu:MenuItems;
public function Main()
{
dispatcher = new EventDispatcher();
menu = new MenuItems( dispatcher );
salads = new Categories( dispatcher );
}
}
}
******
package
{
import flash.events.Event;
public class MenuEvent extends Event
{
//Your Custom Event
public static const CATEGORY:String = "Category";
//Here I type the data property as an Object, but it could also
//be a String , depending on the type of info you need to pass
public var data:Object;
public function MenuEvent( type:String , data:Object ):void
{
super ( type );
this.data = data;
}
override public function clone():MenuEvent
{
return new MenuEvent( type , data );
}
}
******
package
{
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
public class Categories
{
private var dispatcher:EventDispatcher;
public function Categories(dispatcher:EventDispatcher ):void
{
this.dispatcher = dispatcher;
//for this example, i dispatch the event here
//so you don't have to create a button...
dispatcher.dispatchEvent( new MenuEvent( MenuEvent.CATEGORY , "salads" ) );
}
private function clickHandler( event:MouseEvent ):void
{
//for instance , in the "salads" category...
dispatcher.dispatchEvent( new MenuEvent( MenuEvent.CATEGORY , "salads" ) );
}
}
}
******
package
{
import flash.events.EventDispatcher;
public class MenuItems
{
private var dispatcher:EventDispatcher;
public function MenuItems(dispatcher:EventDispatcher ):void
{
this.dispatcher = dispatcher;
dispatcher.addEventListener( MenuEvent.CATEGORY , menuEventHandler );
}
private function menuEventHandler( event:MenuEvent ):void
{
trace( event.data as String);
}
}
}