Руководство по actionscript. часть 4, стр. 034

Как и в случае с внутренними событиями, иерархическая событийная архитектура языка ActionScript позволяет централизовать код, реагирующий на пользовательские события. Предположим, что мы создаем интернет-систему подачи заказов с элементом управления «корзина», который содержит значки выбранных продуктов. Элемент управления «корзина» представляется экземпляром пользовательского класса ShoppingBasket. Подобным образом значок каждого продукта представляется экземпляром пользовательского класса Product. Экземпляры этого класса являются отображаемыми детьми экземпляра класса ShoppingBasket. Экземпляр класса ShoppingBasket имеет строку заголовка, которая выводит название выбранного на настоящий момент продукта.

Когда пользователь выбирает значок продукта в элементе управления «корзина», приложение осуществляет диспетчеризацию пользовательского события Product. PRODUCT SELECTED, получателем которого является соответствующий экземпляр класса Product. Поскольку экземпляр класса ShoppingBasket является предком всех экземпляров класса Product, он получает уведомления всякий раз, когда возникает событие Product. PRODUCT_SELECTED.

Таким образом, чтобы синхронизировать текст строки заголовка экземпляра ShoppingBasket с выбранным в настоящий момент продуктом, мы просто регистрируем единственный приемник productSelectedListener ( ) для события Product. PRODUCT_SELECTED в экземпляре класса ShoppingBasket. Когда вызывается метод productSelectedListener ( ), мы знаем, что был выбран продукт, поэтому заменяем текст строки заголовка корзины названием нового выбранного продукта.

В листингах 21.6 и 21.7 показаны классы ShoppingBasket и Product. Пояснения к коду представлены в виде комментариев. Части кода, относящиеся к событиям, выделены полужирным шрифтом.

Листинг 21.6. Класс ShoppingBasket

package { import flash. display.*; import flash. text.*; import flash. events.*;

// Интернет-корзина, которая может визуально содержать объекты Product, public class ShoppingBasket extends Sprite {

// Отображаемая на экране строка заголовка панели «корзина»

private var title:TextField;

// Массив товаров в этой корзине

private var products:Array;

// Выбранный в настоящий момент продукт

private var selectedProduct:Product;

// Конструктор

public function ShoppingBasket ( ) { // Создаем новый пустой массив для хранения объектов — Product products = new Array( );

// Создаем отображаемую на экране строку заголовка

title = new TextField( );

title. text = «No product selected»;

title. autoSize = TextFieldAutoSize. LEFT;

title. border = true;

title. background = true;

title. selectable = false;

addChild(title);

// Регистрируем приемник для событий Product. PRODUCT_SELECTED, // получателями которых являются дочерние объекты Product. addEventLi stener(Product. PRODUCT_SELECTED, productSelectedLi stener);

}

// Добавляет новый объект Product в корзину public function addProduct (product:Product):void {

// Создаем новый продукт и добавляем его в массив products

products. push(product);

// Добавляем новый продукт в иерархию отображения данного объекта addChiId(products[products. length-1]);

// Теперь, когда у нас появился новый продукт, изменяем // положение всех продуктов updateLayout( );

}

// Очень простой алгоритм размещения продуктов, // упорядочивающий все продукты в одну строку

// в том порядке, в котором они были добавлены // в корзину, слева направо public function updateLayout ( ):void { var totalX:Number = 0;

for (var i:int = 0; i < products.length; i++) { products[i].x = total x;

totalX += products[i] .width + 20; // 20 — интервал между колонками products[i].у = title. height + 20; // 20 — интервал между строками

}

}

// Реагирует на возникновение событий Product. PRODUCT_SELECTED, // получателями которых являются дочерние объекты Product. // Когда продукт выбран, этот метод обновляет // строку заголовка корзины, используя // название выбранного продукта.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 14.03.2011">Руководство по actionscript. часть 3, стр. 081
  • 07.01.2010">Кинетическая типографика
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.73
  • 12.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.112
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.85
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 092
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 026
  • 22.03.2011">Руководство по actionscript. часть 2, стр. 002
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 044
  • 26.02.2011">Руководство по actionscript. часть 6, стр. 065
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.27
  • 28.02.2011">Руководство по actionscript. часть 6, стр. 004
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.120
  • 23.02.2011">Руководство по actionscript. часть 7, стр. 039
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.115
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...