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

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

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

Регистрация: Sep 2011
Сообщений: 22
Attention Проблема с передачей переменных

Посоветуйте как можно передать переменную из класса в класс. Решил разобрать xml и создать массив и его уже передать в другой класс но ниче не выходит . Привожу оба класса. Поправьте пожалуйста. Или подскажите другой вариант.

Код AS3:
package coms 
{
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.display.Sprite;
 
 
	public class Graphic 
	{
		private var urlLoader:URLLoader;
		private var data:XML;
		public var records:XMLList;
		public var result:Array;
		private var date:String;
		private var time:String;
		private var open:String;
		private var close:String;
		private var high:String;
		private var low:String;
 
 
		public function Graphic() 
		{
			urlLoader = new URLLoader;
			urlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
		}
 
		public function load(path:String):void
		{
			urlLoader.load(new URLRequest(path));
		}
 
		private function xmlLoaded(e:Event):void
		{
			//trace(urlLoader.data);
			data = XML(e.target.data);
			records = data.Records.Record;
			//trace(records.Date[10]);
			candle();
		}
 
		private function candle()
		{
 
			date = records.Date;
			time = records.Time;
			open = records.Open;
			close = records.Close;
			high = records.High;
			low = records.Low;
			result = [date, time, open, close, high, low];
 
			//trace(result);
		}
 
		public function getResult():Array
		{
		return result;	
 
		}
 
 
	}
 
}
нужно передать переменные date, time, open, close, high, low или массив result в этот класс:
Код AS3:
package coms
{
	import flash.display.Sprite;
        import flash.display.Graphics;
	import flash.display.Shape;
	import flash.events.Event;
 
	public class ViewGraphics extends Sprite
	{
 
		private var dataXML:Graphic = new Graphic();
 
		public function ViewGraphics() 
		{
			viewXml(dataXML.getResult());
 
		}
 
		private function viewXml(vars:Array):void
		{
			trace("high " +vars);
		}
	}
}
Заранее спасибо.

Старый 30.06.2012, 03:26
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
В вашем примере dataXML не запускает даже метод load чтобы загрузить сам xml. А метод getResult выводит null ибо не определена переменная result.

Структура ViewGraphics должна быть такой

Код AS3:
private var dataXML:Graphic = new Graphic();
 
public function ViewGraphics() 
		{
			dataXML.load('someXML.xml');
                        dataXML.addEventListener(CustomEvent.LOADED , onLoad);
 
		}
public function onLoad(e:CustomEvent)
{
    trace(dataXML.getResult());
}
__________________
Марк Tween

Старый 30.06.2012, 12:33
Vic вне форума Посмотреть профиль Отправить личное сообщение для Vic Найти все сообщения от Vic
  № 3  
Ответить с цитированием
Vic

Регистрация: Sep 2011
Сообщений: 22
чет я немного не понял. Я на линии времени и так вызываю load. Вот код что пишу на линии времени:
Код AS3:
import coms.Graphic;
import coms.ViewGraphics;
 
var graphic:Graphic = new Graphic();
 
graphic.load("xml/XML.xml");
 
 
var wiew:ViewGraphics = new ViewGraphics();
как тут быть?

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Не пишите на линии времени. Код загрузки XML асинхронный. т.е. он не будет вызываться четко строка за строкой. А только по факту загрузки либо ошибки (если у вас стоит подходящий обработчик)
__________________
adobe AS3 manual

Старый 01.07.2012, 14:39
Vic вне форума Посмотреть профиль Отправить личное сообщение для Vic Найти все сообщения от Vic
  № 5  
Ответить с цитированием
Vic

Регистрация: Sep 2011
Сообщений: 22
сделал так как советовали но не понял что за CustomEvent вы написали. Флеш ругается на него что его не существует.. Подскажите пожалуйста

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Там не нужен никакой CustomEvent, это просто лишняя заморочка.
Лучше уж так:
Код AS3:
private var dataXML:Graphic = new Graphic();
 
public function ViewGraphics() 
		{
                                 dataXML.addEventListener(Event.COMPLETE , onLoad);
			dataXML.load('someXML.xml');
 
 
		}
public function onLoad(e:Event)
{
    trace(dataXML.getResult());
}
Ну а в первом класе, соответственно, доставить это событие:
Код AS3:
package coms 
{
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.display.Sprite;
 
 
	public class Graphic extends EventDispatcher
	{
		private var urlLoader:URLLoader;
		private var data:XML;
		public var records:XMLList;
		public var result:Array;
		private var date:String;
		private var time:String;
		private var open:String;
		private var close:String;
		private var high:String;
		private var low:String;
 
 
		public function Graphic() 
		{
			urlLoader = new URLLoader;
			urlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
		}
 
		public function load(path:String):void
		{
			urlLoader.load(new URLRequest(path));
		}
 
		private function xmlLoaded(e:Event):void
		{
			//trace(urlLoader.data);
			data = XML(e.target.data);
			records = data.Records.Record;
			//trace(records.Date[10]);
			candle();
                               dispatchEvent(e); // доставляем событие
		}
 
		private function candle()
		{
 
			date = records.Date;
			time = records.Time;
			open = records.Open;
			close = records.Close;
			high = records.High;
			low = records.Low;
			result = [date, time, open, close, high, low];
 
			//trace(result);
		}
 
		public function getResult():Array
		{
		return result;	
 
		}
 
 
	}
 
}
И, чтобы это работало, первый класс должен расширять EventDispatcher

Старый 01.07.2012, 15:17
Vic вне форума Посмотреть профиль Отправить личное сообщение для Vic Найти все сообщения от Vic
  № 7  
Ответить с цитированием
Vic

Регистрация: Sep 2011
Сообщений: 22
И так сделал .... Ругается на public class Graphic extends EventDispatcher . Ошибка Определение базового класса EventDispatcher не найдено.

Старый 01.07.2012, 15:23
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Так импортируйте.
__________________
тут я

Старый 01.07.2012, 16:10
Vic вне форума Посмотреть профиль Отправить личное сообщение для Vic Найти все сообщения от Vic
  № 9  
Ответить с цитированием
Vic

Регистрация: Sep 2011
Сообщений: 22
Да чето не сообразил сразу) . Да все получилось но одно но... При получении массива данных в другой клас я не могу работать с массивами в этом массиве , а именно мне нужны
date
time
open
close
high
low

в них данные почему то в строчке . Надо сплитом бить каждый, что не есть хорошо. Можно как то передать из класса в класс массивы масива или может есть какой то вариант попроще и получше, потому что данных в массивах очень много около 10 000. Заранее спасибо всем за ответы.

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
а зачем так сложно, массивы в массивах.

Передавайте хотя-бы тип Object а лучше вообще свой тип объекта, который будет содержать нужные поля.
__________________
adobe AS3 manual

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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