Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как вывести данные из класса в TextField (http://www.flasher.ru/forum/showthread.php?t=139049)

Евгени4 22.04.2010 12:03

Как вывести данные из класса в TextField
 
Есть несколько классов, по мере надобности один обращается к другому и передаёт параметры, возможно ли как то из последнего класса вывести данные в TextField который распологается на сцене, или нужно обязательно вернуть данные в Main?
И если вернуть, то как это лучше делать?

пример:
Код AS3:

package main {
 
        import flash.display.MovieClip;
 
        public class Main extends MovieClip {
                //делаем обращение new XMLLoader();       
        }
 
}

Код AS3:

package main {
 
        public class XMLLoader {
                //поймали записали
                //делаем обращение new XMLParser(xml_data);
        }
 
}

Код AS3:

package main {
 
        public class XMLParser {
                //произвели парсинг (отделили катлеты от мух)
                //обратились на выбор из N возможных К new TYPETest(dot, author);
        }
 
}

Код AS3:

package main {
 
        public class TYPETest {
                //сформировали ответ
                //вывели в "output_txt.text" как сделать????
        }
 
}


Obi 22.04.2010 12:09

Код AS3:

public class TYPETest {
        //сформировали ответ
        //вывели в "output_txt.text" как сделать????
 
        public function typeText(targetTextField:TextField, text:String):void {
            targetTextField.text = text;
        }
}


CrazyFlasher 22.04.2010 12:14

dispatchEvent

Евгени4 22.04.2010 12:21

2 Obi
Цитата:

Сообщение от Obi (Сообщение 902400)
Код AS3:

public class TYPETest {
        //сформировали ответ
        //вывели в "output_txt.text" как сделать????
 
        public function typeText(targetTextField:TextField, text:String):void {
            targetTextField.text = text;
        }
}


Не совсем понимаю что вы мне этим пытаетесь сказать?
Что я должен передать в targetTextField, чтоб мне был доступ к TextField на сцене?

2 CrazyFlasher
Это нужно повесить событие в Main, и ждать его, я правильно понимаю?

CrazyFlasher 22.04.2010 12:34

нужно повесить слушателя в Main и потом из TYPETest диспатчить событие, например с bubbles = true

Евгени4 27.04.2010 00:33

Не получается диспатчить подскажите что не так делаю.
Код AS3:

package main {
 
        import flash.display.MovieClip;
        import flash.events.Event;
 
        public class Main extends MovieClip {
                var dispatch:TYPETest = new TYPETest();
                dispatch.addEventListener(TYPETest.ACTION, textOutput);
 
                //делаем обращение new XMLLoader();       
        }
 
        public function textOutput(e:Event):void {
                trace("Принято!");
        }
 
}

Код AS3:

package main {
 
        public class XMLLoader {
                //поймали записали
                //делаем обращение new XMLParser(xml_data);
        }
 
}

Код AS3:

package main {
 
        public class XMLParser {
                //произвели парсинг (отделили катлеты от мух)
                //обратились на выбор из N возможных К new TYPETest();
                //с запросом OutTYPETest(dot, author);
        }
 
}

Код AS3:

package main {
        import flash.text.*;
        import flash.events.Event;
        import flash.events.EventDispatcher;
 
        public class TYPETest  extends EventDispatcher {
                public static var ACTION:String = "TypeTest";
 
                public function OutTYPETest(dot:String, author:String):void {
                        //сформировали ответ
                        dispatchEvent(new Event(TYPETest.ACTION, true)); //не проходит =(
                }
        }
 
}


derhab 27.04.2010 00:47

наскоко я понимаю, пузырьковые события только для экранных объектов, а у вас наследник EventDispatcher-а пытается его слать..

mikhailk 27.04.2010 00:53

Вывод на экран не обязателен, но без addChild пузыри подниматься не будут.

Кстати, у меня вопрос.
Этот зоопарк классов просто из любви к ООП? :)

Может просто заключить эти четыре функции в один класс да и пользоваться его переменными?

derhab 27.04.2010 01:03

Цитата:

Сообщение от mikhailk (Сообщение 903896)
Вывод на экран не обязателен, но без addChild пузыри подниматься не будут.

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

Евгени4 27.04.2010 01:08

Цитата:

Сообщение от derhab (Сообщение 903893)
наскоко я понимаю, пузырьковые события только для экранных объектов, а у вас наследник EventDispatcher-а пытается его слать..

А если:
Код AS3:

dispatchEvent(new Event(TYPETest.ACTION, false)); //не проходит =(

то всеравно не проходит.
Сильно не пинайте, но я пока изучаю AS3. :)

Цитата:

Сообщение от mikhailk (Сообщение 903896)
Вывод на экран не обязателен, но без addChild пузыри подниматься не будут.

Кстати, у меня вопрос.
Этот зоопарк классов просто из любви к ООП? :)

Может просто заключить эти четыре функции в один класс да и пользоваться его переменными?

Нет не из-за любви, а из-за того что код время от времени модифицируется, поэтому в нем проще ориентироваться (да и на будующее ООП будет более полезен), и главное появляются сложности, которые интересно решать (для того они и созданы). Я же в процессе изучения))

Цитата:

Сообщение от derhab (Сообщение 903901)
ну я как бы о том же...
проще всего при создании экземпляра TYPETest передать в конструктор ссылку на Main и диспатчить событие напрямую

А можно чуть подробнее, или небольшой пример?

derhab 27.04.2010 01:17

создаете где-то в Main экземпляр TYPETest с ссылкой в конструкторе:

Код AS3:

var dispatch:TYPETest = new TYPETest(this);

в экземпляре TYPETest например:

Код AS3:

package main {
        import flash.text.*;
        import flash.events.Event;
        import flash.events.EventDispatcher;
 
        public class TYPETest  extends EventDispatcher {
 
                public static var ACTION:String = "TypeTest";
 
                private var _main:Main;
 
                public function TYPETest(main:Main) {
 
                      _main = main;
                }
 
                public function OutTYPETest(dot:String, author:String):void {
                        //сформировали ответ
                        _main.dispatchEvent(new Event(TYPETest.ACTION));
                }
        }
 
}


Евгени4 27.04.2010 01:34

derhab
Тут засада на засаде. :)
У меня же ещё есть XMLParser, который тоже обращается к TYPETest, и если ему передать main:Main = null; то теряется смысл.

Код AS3:

package main {
 
        public class XMLParser {
                //произвели парсинг (отделили катлеты от мух)
                //обратились на выбор из N возможных К new TYPETest();
                //с запросом OutTYPETest(dot, author);
        }
 
}


derhab 27.04.2010 01:53

Цитата:

Сообщение от Евгени4 (Сообщение 903910)
derhab
Тут засада на засаде. :)
У меня же ещё есть XMLParser, который тоже обращается к TYPETest, и если ему передать main:Main = null; то теряется смысл.
}[/as3]

че т я не совсем понял..но хорошо..
можно так:

Код AS3:

package main {
 
        import flash.display.MovieClip;
        import flash.events.Event;
 
        public class Main extends MovieClip {
 
              static private var:_instance:Main;
 
              static public function get instance():Main
              {
                      return _instance;
              }
 
              public function Main()
              {
                    _instance = this;
              }
 
        }
}

теперь из любого места достаете экземпляр Main
Код AS3:

Main.instance.dispatchEvent(...)


Евгени4 27.04.2010 13:46

derhab
Ничего не выходит:
Код AS3:

trace(Main.instance.dispatchEvent(new Event(TYPETest.ACTION))); //выдает true

а функция textOutput в классе Main несрабатывает,
Код AS3:

        public function textOutput(e:Event):void {
                trace("Принято!");
        }

Если убрать все промежуточные конструкторы XMLLoader, XMLParser то всё работает, но это не выход.
Или вешать в каждый конструктор диспатчер и ждать его в Main, а потом из Main уже дальше обращаться к следующему конструктору с передачей аргументов от предыдущего, если они были.
Я понимаю что это так должно работать.

Добавлено через 11 часов 13 минут
Подскажите пожалуйста, а как с помощью bubbles = true реализовать?


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

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