Flash AS 3.0 создает консольный подход - PullRequest
1 голос
/ 23 марта 2010

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

Я пытался отправить общее событие, но не могу найти способ отправить сообщение вместе с событием или, по крайней мере, ссылку на объект, который отправляет событие.

какой подход вы бы предложили?

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

Настраиваемое событие с динамическим ключевым словом будет работать так, как рекламируется в посте Danjp, но я бы советовал против него в любом более крупном проекте. Вы теряете возможность строго вводить, какова ваша информационная нагрузка - если кто-то еще должен редактировать ваш код, он может и не догадываться, например, что у вас динамически генерируется свойство «myData» для вашего события. Это не вызовет бесконечной головной боли для того, кто попытается отредактировать ваш код позже.

«Правильный» способ сделать это - создать пользовательские события со строго типизированными членами, которые содержат ваши данные. Так, например:

package com.yourdomain.events {
    import flash.events.Event;
    import com.yourdomain.model.vo.MyValueObject;

    public class MyEvent extends Event {
        public var myVO:MyValueObject;
        public function MyEvent(type:String):void {
            super(type);
        }
    }
}

Так что, да, это в двух словах. Вы захотите указать в Google точный формат, мой упрощенный - ваш вызов super () должен иметь другие параметры, и вы захотите переопределить метод clone (). Но преимущество здесь в том, что любой, кто проверяет ваш код, точно знает, какой тип данных искать в качестве полезной нагрузки. В данном случае это экземпляр MyValueObject.

Дайте мне знать, если у вас есть какие-то конкретные вопросы о том, почему, но это общая идея. Всякий раз, когда вы делаете большой проект AS3, вы захотите использовать такие события, как это, чтобы не только отправлять различные уведомления, но и нести четко определенные и строго типизированные полезные данные.

0 голосов
/ 24 марта 2010

Я попробовал то, что вы, ребята, предложили ... это мой код события

public class ConsoleEvent extends Event
{
    public var variable: String;
    public function ConsoleEvent( variable1: String, type:String='message',bubbles:Boolean=false, cancelable:Boolean=false)
    {
        super(type, bubbles, cancelable);
        this.variable = variable1;
    }
    override public function clone():Event
    {
        return new ConsoleEvent ( variable,type, bubbles, cancelable);
    }

}
}

, но это след

[Event type="message" bubbles=false cancelable=false eventPhase=2]

Я поймал событие с

reader.addEventListener('message', consoleadd);
0 голосов
/ 23 марта 2010

Самый простой способ - создать класс DynamicEvent, в который вы можете добавить любое сообщение, которое хотите.

package {
    import flash.events.Event;
    dynamic public class DynamicEvent extends Event {
        public function DynamicEvent(t:String, b:Boolean = false, c:Boolean = false){
            super(t, b, c);
        }
    }
}

Установив этот класс как динамический (с использованием динамического ключевого слова), вы можете добавлять значения к вашему объекту события:

var _dynEvent:DynamicEvent = new DynamicEvent(LOAD_PROGRESS);
_dynEvent.id = _id;
_dynEvent.bytesLoaded = bytesLoaded;
dispatchEvent(_dynEvent);

Тогда, когда вы слушаете событие:

function eventHandler(e:DynamicEvent):void{
    trace(e.bytesLoaded);
    trace(e.id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...