Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.08.2007, 21:33
this.create вне форума Посмотреть профиль Отправить личное сообщение для this.create Найти все сообщения от this.create
  № 1  
Ответить с цитированием
this.create

Регистрация: Feb 2007
Сообщений: 264
По умолчанию Как правильно создать событие пользовательскому классу.

Вопрос именно в методике создания. Прочитав несколько обсуждений по этой теме на форуме пришел к выводу, что необходимо использовать класс EventDispatcher или AsBroadcaster.

Немного поэксперементировав сделал другой вариант, рабочий, но упомянутые выше классы не понадобились.
Изначально мне было нужно, чтобы у класса было событие, которое срабатывало бы по окончании некоторого действия, начатого классом( двухступенчатая загрузка). Вот, что получилось:
Код:
//класс
//
class Test {
    public function Test() {
    }
    //
    public function preLoad():Void {
        /*
        здесь выполняются некоторые действия время окончания которых неизвестно затем вызывается метод onLoad
        */
        onLoad();
    }
    //
    //пустой метод
    public function onLoad():Void {
    }
}
Использование:
Код:
import mx.utils.Delegate;
//
var test:Test = new Test();
//
test.onLoad = Delegate.create(this, this.Do);
function Do():Void {
    trace(this); //_level0
}
//
test.preLoad();
Я подозреваю, что метод этот не соответствует правильному стилю программирования в AS2. Не могли бы вы прокомментировать его (какие недостатики, "подводные камни")?

Старый 02.08.2007, 22:40
lowka вне форума Посмотреть профиль Отправить личное сообщение для lowka Найти все сообщения от lowka
  № 2  
Ответить с цитированием
lowka

Регистрация: Sep 2006
Сообщений: 256
1) Добавить можно только 1 обработчик.
2) Такой способ не может отразить состояние события. //Вру. Можно


Последний раз редактировалось lowka; 02.08.2007 в 22:44.
Старый 02.08.2007, 22:40
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А почему у вас имя функции похоже на имя класса?
Подход неверный, в общем-то. Вы жестко связываете класс и метод.
EventDispatcher и AsBroadcaster созданы для того чтобы связь между классами была нежесткой.

Старый 03.08.2007, 02:34
this.create вне форума Посмотреть профиль Отправить личное сообщение для this.create Найти все сообщения от this.create
  № 4  
Ответить с цитированием
this.create

Регистрация: Feb 2007
Сообщений: 264
Цитата:
Сообщение от __etc
А почему у вас имя функции похоже на имя класса?
Код:
class Test {
    public function Test() {
    }
    //
    public function preLoad():Void {
        /*
        здесь выполняются некоторые действия время окончания которых неизвестно затем вызывается метод onLoad
        */
        onLoad();
    }
    //
    //пустой метод
    public function onLoad():Void {
    }
}
Если вы про эту строчку, то это у меня пустой конструктор.

Старый 03.08.2007, 02:41
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 5  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
В классе:
Код:
public var onLoad:Function = null;
а потом переопределяйте.
А вообще лучше геттер-сеттер организовать.

Старый 03.08.2007, 02:48
this.create вне форума Посмотреть профиль Отправить личное сообщение для this.create Найти все сообщения от this.create
  № 6  
Ответить с цитированием
this.create

Регистрация: Feb 2007
Сообщений: 264
Цитата:
Сообщение от Kikasso
В классе:
Код:
public var onLoad:Function = null;
Это лучше? Чем?

Цитата:
Сообщение от Kikasso
А вообще лучше геттер-сеттер организовать.
Напишите пример пожалуйста. И объясните, чем лучше.

Старый 03.08.2007, 09:58
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от this.create
Если вы про эту строчку, то это у меня пустой конструктор.
Нет, я не про класс говорю.
Я говорю про функцию «Do».

Ничего не надо переопределять, никаких геттеров/сеттров и прочей фигни. В AS1 было приняты конструкции myObj.onRelease = function() …, в AS2 их лучше заменить на EventDispatcher.

Старый 03.08.2007, 11:42
CrazyFlasher вне форума Посмотреть профиль Отправить личное сообщение для CrazyFlasher Найти все сообщения от CrazyFlasher
  № 8  
Ответить с цитированием
CrazyFlasher
 
Аватар для CrazyFlasher

Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,182
использовать EventDispatcher
__________________
Flash Developer
Папа TDP4 Team Battle

Старый 03.08.2007, 15:35
this.create вне форума Посмотреть профиль Отправить личное сообщение для this.create Найти все сообщения от this.create
  № 9  
Ответить с цитированием
this.create

Регистрация: Feb 2007
Сообщений: 264
Цитата:
Сообщение от Kikasso
В классе:
Код:
public var onLoad:Function = null;
а потом переопределяйте.
Спасибо. С этим видом записи разобрался.

Цитата:
Сообщение от CrazyFlasher
использовать EventDispatcher
Я уже сделал с использованием EventDispatcher. Просто интересны были методики создания.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.