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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.03.2011, 04:59
vave вне форума Посмотреть профиль Отправить личное сообщение для vave Найти все сообщения от vave
  № 1  
Ответить с цитированием
vave

Регистрация: Nov 2003
Адрес: Spb
Сообщений: 33
Отправить сообщение для vave с помощью ICQ
По умолчанию Хранение результатов функций других классов

Опять наверно всех шокирую свое глупостью но:

есть скажем класс Main в который я импортирую 100500 других классов один из которых например XML парсер

и вызываю например так:
var XMLobj = new XMLparser(какой-то.xml)

в классе XMLpaser происходит собственно много вещей таких как обработчик событий лоадера, аттач прелоадера и т.д. тоесть происходит процесс - не мгновенный

вопросы в следующем:
1) XMLobj равен null
2) как сделать ретурн только нужного из результата парсинга, например return XMLdata.тег_такойто:toXLSList и присвоить его XMLobj.имя_тега_такогото
3) как перехватить событие когда XMLobj примет значение функции XMLpaser (через ентерфремй и обновлять 50 раз в секунду думаю не эффективно) чтобы можно мыло спокойно работать с результатами парсинга в главном классе?
4) как вообще сделать ретурн из класса???
Наглядно:
Код AS3:
// тут главный класс
package {
import XMLparser
public class Main {
public var XMLobj:XLList
public function Main() {
XMLobj = new XMLparser(какой-то.xml)
// когда заполнится XMLobj и не будет равен null
// например trace(XMLobj)
}}}
 
//тут парсер XML
package {
public class XMLparser {
public var dataXML:XMLList
public function XMLparser(url) {
//бла бла бла  
loader.addEventListener(Event.COMPLETE,complHandler);
 
}
public function complHandler(event:Event)
{
dataXML = XML(event.target.data);
// вот я получил  dataXML  в котором находится весь мой XML пусть даже как XMLList
// как теперь мне присвоить XMLobj из класса Main листинг dataXML из этого класса?
// что-то типа return dataXML
// и например добавить метод к XMLobj.только_теги_TEG1 который будет хранить данныйе из dataXML.только_теги_TEG1?
}}}
только прошу пожалуйста доступно а не вроде : на http://www.adobe.com/support/flash/ все есть...


Последний раз редактировалось vave; 15.03.2011 в 05:35.
Старый 15.03.2011, 09:51
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вам бы книжку почитать - глядишь, и "шокировать" никого не придется.
То что Вам нужно называется "события" и "слушатель событий"
Доступно - в хелпе: Event, EventDispatcher, addEventListener(), dispatchEvent().
Вкратце - Мейн подписывается на событие типа COMPLETE от класса XMLparser, прежде чем отдать ему ссылку на xml в обработку. XMLparser, загрузив и разобрав xml, посылает событие, которого ожидает Мейн, то есть говорит Мейну: "Готово". После чего Мейн может забрать данные у XMLparser, если они хранятся в известном классу Мейн свойстве, либо данные могут переданы вместе с событием.
Цитата:
как теперь мне присвоить XMLobj из класса Main листинг dataXML из этого класса?
У Вас в коде все это есть.
Точно так же, как Вы "присвоили" XMLparser'у данные, загруженные лоадером - тоже другим классом.
__________________
Reality.getBounds(this);

Старый 15.03.2011, 10:28
vave вне форума Посмотреть профиль Отправить личное сообщение для vave Найти все сообщения от vave
  № 3  
Ответить с цитированием
vave

Регистрация: Nov 2003
Адрес: Spb
Сообщений: 33
Отправить сообщение для vave с помощью ICQ
да, спс, но если в классе XMLparser происходит куча всего как отдать только определенные данные?

Старый 15.03.2011, 10:31
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Cохранить их в то самое свойство, которое будет "забирать" Мейн (напр. data), прежде чем отправлять событие, что все готово.
__________________
Reality.getBounds(this);

Старый 15.03.2011, 19:58
vave вне форума Посмотреть профиль Отправить личное сообщение для vave Найти все сообщения от vave
  № 5  
Ответить с цитированием
vave

Регистрация: Nov 2003
Адрес: Spb
Сообщений: 33
Отправить сообщение для vave с помощью ICQ
прошу прощения за наглость а можно на простейшем примере синтаксис?

Старый 15.03.2011, 22:22
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 6  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Код AS3:
// Главный класс
package 
{
    import flash.display.Sprite;
    import flash.events.Event;
 
    public class TestProject extends Sprite 
    {
        private var subClassObject:SubClass;
 
        public function TestProject():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(event:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            subClassObject = new SubClass();
            subClassObject.addEventListener(Event.COMPLETE, completeHandler);
            subClassObject.init("12345");
        }
 
        private function completeHandler(event:Event):void 
        {
            trace(typeof subClassObject.data);
            trace(subClassObject.data);
        }
    }
}
 
// Второстепенный класс
package  
{
    import flash.events.EventDispatcher;
    import flash.events.Event;
 
    public class SubClass extends EventDispatcher
    {
        public var data:int;
 
        public function SubClass() { }
 
        public function init(someString:String):void
        {
            data = parseInt(someString);
            dispatchEvent(new Event(Event.COMPLETE));
        }
    }
}
Основы есть у Мука, остальное здесь.

Старый 15.03.2011, 22:36
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<image url="images/image1.jpg"/>
<image url="images/photo15.jpg"/>
<image url="images/mom.jpg"/>
<image url="images/who_are_you.jpg"/>
<image url="images/wtf12_1457351.jpg"/>
<image url="images/tank101.jpg"/>
<image url="images/milkigirl.jpg"/>
</data>
Код AS3:
package  
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
 
	public class XMLLoader extends EventDispatcher
	{
		private var _loader:URLLoader;
		private var _list:XMLList;
 
		public function XMLLoader() { }
 
		public function load(url:String):void
		{
			_loader = new URLLoader();
			_loader.dataFormat = URLLoaderDataFormat.TEXT;
			_loader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
			_loader.addEventListener(Event.COMPLETE, onLoadComplete);
			_loader.load(new URLRequest(url));
		}
 
		private function onLoadError(event:IOErrorEvent):void
		{
			trace("Ошибка загрузки XML : " + event.text);
		}
 
		private function onLoadComplete(event:Event):void
		{
			var xml:XML = XML(event.target.data);
			_list = xml..image.@url;
			dispatchEvent(new Event(Event.COMPLETE));
		}
 
		public function get list():XMLList
		{
			return _list;
		}
	}
}
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
 
	public class Main extends Sprite 
	{
		private var _imagesList:XMLList;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			var listLoader:XMLLoader = new XMLLoader();
			listLoader.addEventListener(Event.COMPLETE, onImageListComplete);
			listLoader.load("images.xml");
		}
 
		private function onImageListComplete(event:Event):void 
		{
			var loader:XMLLoader = event.target as XMLLoader;
			_imagesList = loader.list;
			trace(_imagesList.toXMLString())
		}
	}
}
__________________
Reality.getBounds(this);

Старый 15.03.2011, 22:45
vave вне форума Посмотреть профиль Отправить личное сообщение для vave Найти все сообщения от vave
  № 8  
Ответить с цитированием
vave

Регистрация: Nov 2003
Адрес: Spb
Сообщений: 33
Отправить сообщение для vave с помощью ICQ
омг - спс за простой пример жалко тут раздачу пива не организовать

назрел вопрос, непривычный синтаксис чтения атрибутов: xml..image.@url;

.. две точки это пропуск корневого тега?
@ это указатель на атрибут?


Последний раз редактировалось vave; 16.03.2011 в 00:26.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

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

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


 


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


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