Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Использование компонентов в Macromedia Flash #2


Информационный Канал Subscribe.Ru

Выпуск №2.

Добрый вечер (утро, день). Для начала небольшое отступление от темы. Как вы могли заметить, оформление выпусков было каждый раз отличным, я думаю пока остановиться на текущем варианте. Еще одно обстоятельство меня немного удивило. Выпуском рассылки я занялся впервые, я использую в качестве почтового клиента The Bat, как оказалось поддержка html у него довольно сильно страдает. Особая проблема с отступами. При желании конечно можно не использовать списки, заголовки, или применить метод "тыка" и с помощью css подобрать все-таки приемлемые параметры. Но я не стал этого делать, мне как-то в свое время хватило конфликтов браузеров, тем более ради интереса я восстановил у себя Outlook Express, и посмотрел, как выглядят выпуски там (естественно все в порядке, так как думается для отображения он использует ИЕ, отмечу, что я не поклонник данного браузера). Так как все проблемы касаются отступов, то ничего страшного в этом нет, разницу можете посмотреть самостоятельно. Я все это написал к тому, чтобы вы не винили автора в кривизне рук. После всего этого вернемся к тематике рассылки. В последнем выпуске мы положили начало обзора компонентов в Macromedia Flash, этим мы будем заниматься и сегодня.

Компоненты пользовательского интерфейса представляют собой интерактивные средства, с помощью которых пользователь взаимодействую с нашим приложением, выполняя определенные действия, т.е. совершая события. Например, самое важное событие для кнопки, которое совершается это щелчок по ней. В зависимости от ситуации может потребоваться выполнить определенные действия в ответ на совершенное действие пользователя, т.е. выполнить определенный участок кода при возникновении определенного события. Так как обработка события применяется не только для компонента Button, но и почти для всех других компонентов, то рассмотрим данный вопрос более детально.

Во времена Flash 5 обработка событий была привязана к объектам, и код события должен был введен в код кнопки (не компонента) или клипа. Данная концепция была неудачна и ее сменила модель Генератор-Листенеры. Генератор это объект, который соответственно генерирует событие, т.е. оповещает о его происхождении другим объектам. Для того чтобы сэкономить машинные ресурсы оповещаться будут только те объекты, которые подписались на рассылаемый вид событий. Такие объекты называются Листенеры. Такую модель можно сравнить с организацией работы рассылки - я создаю ее выпуски, и тем самым являюсь объектом Генератором, а вы подписавшиеся на данную рассылку ассоциируйтесь с объектами Листенеры. Задачей Листенера служит содержание того кода, который должен выполниться при наступлении нужного события.

Ядром всей модели является не документируемый объект AsBroadcaster, он содержит 4 метода: AsBroadcaster.initialize(obj), AsBroadcaster.addListener(listener), AsBroadcaster.removeListener(listener), AsBroadcaster.broadcastMessage("Event", parameters). Мы не будем подробно рассматривать данный объект, так как для наших целей будет служить класс EventDispatcher, ограничимся небольшим комментарием к каждому методу. Метод initialize регистрирует объект как генератор. Данная операция сводиться к переносу 3-ех оставшихся методов на объект, и, кроме того, создается свойство _listeners, представляющее собой массив Листенеров. Метод addListener служит для добавления нового Листенера, последний заносится в массив _listeners. Для удаления Листенера служит метод removeListener. Оповещение Листенеров производиться с помощью метода broadcastMessage, который на уровне реализации просто вызывает метод объекта (поочередно из массива _listeners), передавая ему нужные параметры.

В случае использования компонентов для организации работы описанного механизма событий следует использовать специальный класс EventDispatcher. Обратимся к справочной документации и посмотрим, что собой представляет данный класс.

Перевод: Using Components > Components Dictionary > EventDispatcher class

Класс EventDispatcher

Имя класса в ActionScript: mx.events.EventDispatcher

События позволяют узнавать приложению, когда пользователь взаимодействует с компонентами, а также когда произошли важные изменения как, например создание, уничтожение, или изменение размеров компонента.

Методы класса EventDispatcher позволяют добавлять и удалять Листенеры для событий, которым должен быть сопоставлен определенный код. Например, с помощью метода EventDispatcher.addEventListener можно зарегистрировать Листенер для компонента.

Объекты событий

Объект события передается Листенеру как параметр. Объект события - объект ActionScript, который включает свойства содержащие информацию о произошедшем событии. Можно использовать объект события в вызываемой функции Листенера, для получения доступа к названию события или имени экземпляра компонента, который генерирует событие. Например, следующий код использует свойство target объекта evtObj, для доступа к свойству label кнопки, которая генерирует событие click:

listener = new Object();
listener.click = function(evtObj){
  trace("The " + evtObj.target.label + " button was clicked");
}
myButton.addEventListener("click", listener);

СвойствоОписание
typeсодержит тип (название) события
targetуказатель на компонент генерирующий событие

Методы класса EventDispatcher

Доступно с версии 6.0 79.0

  1. EventDispatcher.addEventListener(event, listener)
    Параметры:
    event - строка с именем события
    listener - указатель на объект Листенер или функцию
    Описание:
    Метод регистрирует объект Листенер для события компонента. Листенером может быть объект или функция. В случае использования объекта он должен содержать метод, имя которого совпадает с названием события. Можно зарегистрировать несколько Листенеров на одно и тоже событие, используя метод addEventListener() для каждого Листенера.

  2. EventDispatcher.dispatchEvent(eventObject)
    Параметры:
    eventObject - указатель на объект события, который должен содержать краткое название события (type). Также в нем обычно присутствует свойство, содержащее указатель на объект (компонент) генератор (target). В состав объекта могут входить другие свойства, включающие необходимую информацию для обработки события.
    Описание:
    Метод сообщает о произошедшем событии его Листенерам.
    Пример:
    Следующий пример посылает событие click:
    dispatchEvent({type:"click"});

  3. EventDispatcher.removeEventListener(event, listener)
    Описание:
    Метод обратный addEventListener, имеющий аналогичные параметры, и снимающий статус Листенера с объекта в соответствии с указанным событием.

Таким образом, метод addEventListener добавляет в определенный массив (_listeners), где хранятся Листенеры, объекта генератора, передаваемый в параметр указатель на Листенер. Метод dispatchEvent на основании данного массива вызывает соответствующий метод Листенера, который является нужной нам реакцией на событие. В случае необходимости можно удалить обработку события, воспользовавшись методом removeEventListener, который удаляет Листенер из массива. Главной особенностью использования класса EventDispatcher от объекта AsBroadcaster является регистрация Листенера на определенный вид события, а не на все события объекта Генератора.

Нам был продемонстрирован пример обработки события click, мы немного упростим его, оставив вывод фиксированного текста, и посмотрим, какой вид синтаксиса у нас есть в распоряжении.

  • Создаем новый объект и делаем его Листенером события click:
    listener = new Object();
    listener.click = function(){
      trace("Hello!");
    }
    myButton.addEventListener("click", listener);
    
  • Можно для этих же целей использовать временную шкалу:
    function click() {
      trace("Hello!");
    }
    myButton.addEventListener("click", _root);
    
  • В качестве указателя передается не объект, а имя функции:
    function hello(){
      trace("Hello!");
    }
    myButton.addEventListener("click", hello);
    
  • Аналогичное использование функции, но в сокращенном формате:
    myButton.addEventListener("click", function () {trace("Hello!");});

Какой вариант следует использовать, думаю не принципиально, все зависит от ситуации. Куда более важно понять саму идею механизма Генератор-Листенеры. Более полную информацию по данной тематике вы найдете в справочной системе, или книге посвященной языку ActionScript. Сегодняшний выпуск подошел к концу, следующий раз мы обязательно вернемся к компоненту Button и рассмотрим все его методы и свойства. До встречи...


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: inet.webbuild.flashmx
Отписаться
Вспомнить пароль

В избранное