Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как с Event'ом передавать данные? (http://www.flasher.ru/forum/showthread.php?t=133002)

Dmitry Y 25.11.2009 04:32

Как с Event'ом передавать данные?
 
Не могу понять, можно ли с помощью пользовательского event'а не просто разослать сообщение, что он был, но и передать какие-то данные.
Вот такой пример. Пытаюсь, скажем, сделать текстовое поле с логом сообщений, приходящих заранее неизвестно из какой части программы:
Код AS3:

package com.log {
        import flash.events.*;
        import flash.text.TextField;
        import flash.display.Sprite;
 
        public class Log extends Sprite {
                public static const ADD_LOG:String = 'add_log';
                private var log:TextField = new TextField();
                public function Log(p:Sprite) {
                        p.addChild(log);
                        p.stage.addEventListener(Log.ADD_LOG, addLog);
                }
                public function addLog (e:Event):void {
                        log.appendText(e.target.msg+"\n");
                }
        }
}

В классе документа:
Код AS3:

.........
public var msg:String;
...........
log = new Log(this);
............
msg = 'Что-то там';
dispatchEvent(new Event(Log.ADD_LOG, true));

Так это работает, но как быть, если нужно добраться до этого лога откуда-то еще?
Например, из класса, которого вообще нет в списке отображения?

Видимо, нужно строку сообщения как-то прицепить к самому event'у.
Кажется, должно быть что-то простое и очевидное, но в примерах ничего не нахожу.

etc 25.11.2009 08:08

Создайте свое собственное событие LogEvent.

Котяра 25.11.2009 09:37

примерно так:
Код AS3:

package ru.globo.gui.views.scoresWindow.events 
{
        import flash.events.Event;
 
        /**
        * ...
        * @author 111
        */

        public class TeamButtonEvent extends Event
        {
                public static const TEAM_BUTTON_CLICKED:String = "TeamButtonClicked";
 
                public var teamName:String;
 
                public function TeamButtonEvent(type:String, $teamName:String, bubbles:Boolean=false, cancelable:Boolean=false)
                {
                        super(type, bubbles, cancelable);
                        teamName = $teamName;
 
                }
 
                public override function clone():Event
                {
                        return new TeamButtonEvent(type, teamName, bubbles, cancelable);
                }
 
                public override function toString():String
                {
                        return formatToString("TeamButtonEvent",  "type", "teamName", "bubbles", "cancelable", "eventPhase");
                }
 
        }
 
}


Dmitry Y 25.11.2009 15:01

Спасибо.

Н-да, час от часу не легче, так и знал.
Спрашивается, почему такую очевидно востребованную вещь было не заложить в AS3 изначально.
Раньше написал бы _root.log.text += 'ла-ла-ла'
Теперь сидеть, городить страницу кода.

Что ж, будем работать...

Hidest 25.11.2009 16:06

Так возможность наследования от Event и реализация своего события и заложена изначально (в частном случае) - чем тут быть недовольным... Зато по гибкости и удобству - ни в какое сравнение не идет с тем, как вы бы написали раньше.


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

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