Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как правильно создать событие пользовательскому классу. (http://www.flasher.ru/forum/showthread.php?t=99326)

this.create 02.08.2007 21:33

Как правильно создать событие пользовательскому классу.
 
Вопрос именно в методике создания. Прочитав несколько обсуждений по этой теме на форуме пришел к выводу, что необходимо использовать класс 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. Не могли бы вы прокомментировать его (какие недостатики, "подводные камни")?

lowka 02.08.2007 22:40

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

etc 02.08.2007 22:40

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

this.create 03.08.2007 02:34

Цитата:

Сообщение от __etc
А почему у вас имя функции похоже на имя класса?

Код:

class Test {
    public function Test() {
    }

    //
    public function preLoad():Void {
        /*
        здесь выполняются некоторые действия время окончания которых неизвестно затем вызывается метод onLoad
        */
        onLoad();
    }
    //
    //пустой метод
    public function onLoad():Void {
    }
}

Если вы про эту строчку, то это у меня пустой конструктор.

Kikasso 03.08.2007 02:41

В классе:
Код:

public var onLoad:Function = null;
а потом переопределяйте.
А вообще лучше геттер-сеттер организовать.

this.create 03.08.2007 02:48

Цитата:

Сообщение от Kikasso
В классе:
Код:

public var onLoad:Function = null;

Это лучше? Чем?

Цитата:

Сообщение от Kikasso
А вообще лучше геттер-сеттер организовать.

Напишите пример пожалуйста. И объясните, чем лучше.

etc 03.08.2007 09:58

Цитата:

Сообщение от this.create
Если вы про эту строчку, то это у меня пустой конструктор.

Нет, я не про класс говорю.
Я говорю про функцию «Do».

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

CrazyFlasher 03.08.2007 11:42

использовать EventDispatcher

this.create 03.08.2007 15:35

Цитата:

Сообщение от Kikasso
В классе:
Код:

public var onLoad:Function = null;
а потом переопределяйте.

Спасибо. С этим видом записи разобрался. :)

Цитата:

Сообщение от CrazyFlasher
использовать EventDispatcher

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


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

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