Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с передачей переменных (http://www.flasher.ru/forum/showthread.php?t=181698)

Vic 30.06.2012 03:12

Проблема с передачей переменных
 
Посоветуйте как можно передать переменную из класса в класс. Решил разобрать 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);
                }
        }
}

Заранее спасибо.

in4core 30.06.2012 03:26

В вашем примере 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());
}


Vic 30.06.2012 12:33

чет я немного не понял. Я на линии времени и так вызываю load. Вот код что пишу на линии времени:
Код AS3:

import coms.Graphic;
import coms.ViewGraphics;
 
var graphic:Graphic = new Graphic();
 
graphic.load("xml/XML.xml");
 
 
var wiew:ViewGraphics = new ViewGraphics();

как тут быть?

strangedk 30.06.2012 16:59

Не пишите на линии времени. Код загрузки XML асинхронный. т.е. он не будет вызываться четко строка за строкой. А только по факту загрузки либо ошибки (если у вас стоит подходящий обработчик)

Vic 01.07.2012 14:39

сделал так как советовали но не понял что за CustomEvent вы написали. Флеш ругается на него что его не существует.. Подскажите пожалуйста

caseyryan 01.07.2012 15:06

Там не нужен никакой 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

Vic 01.07.2012 15:17

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

КорДум 01.07.2012 15:23

Так импортируйте.

Vic 01.07.2012 16:10

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

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

strangedk 01.07.2012 21:02

а зачем так сложно, массивы в массивах.

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


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

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