PDA

Просмотр полной версии : Не получается вернуть массив из функции.


elcard
27.03.2009, 19:59
Не получается вернуть массив из функции. Вроде все перепробовал...
Внутри функции массив трейсится а получить его в руте не получается :(... есть идеи?


function getXML()
{
var my_xml:XML = new XML();
my_xml.load("test.xml");

my_xml.onLoad = function(success)
{
my_xml.ignoreWhite = true;
my_xml.parseXML(my_xml.toString());
//trace(my_xml);

var vars:Array = new Array();

_root.date_ = my_xml;

_root.date_ = _root.date_.firstChild;
_root.date_ = _root.date_.firstChild;

vars[0] = _root.date_.attributes.name;
_root.date_ = _root.date_.nextSibling;
vars[1] = _root.date_.attributes.name;
_root.date_ = _root.date_.nextSibling;
vars[2] = _root.date_.attributes.name;
_root.date_ = _root.date_.nextSibling;
vars[3] = _root.date_.attributes.name;

trace(vars);

return vars;
}
}

getXML();

iNils
27.03.2009, 20:29
И не получится. Загрузка, это асинхронная операция. То есть вы не можете в каком-то месте вызвать загрузку xml, подождать пока данные загрузятся и продолжить выполнять скрипт дальше.
Поэтому все действия должны описываться в функциях.
import mx.utils.Delegate;
var my_xml:XML = new XML ();
my_xml.ignoreWhite = true;
my_xml.onLoad = Delegate.create (this, onLoadXML);
function init () {
/// действия до xml
getXML ();
}
function init2 (array:Array) {
/// действия c xml
trace (array)
}
function getXML () {
my_xml.load ("test.xml");
}
function onLoadXML (success) {
trace(my_xml);
var vars:Array = new Array ();
vars[0] = my_xml.firstChild.attributes.name;
vars[1] = my_xml.firstChild.attributes.name;
vars[2] = my_xml.firstChild.attributes.name;
vars[3] =my_xml.firstChild.attributes.name;
init2 (vars);
}
init ();

nOobCrafter
27.03.2009, 20:41
по моему вобще синтаксис не соблюден..из хелпа:
function sum(a:Number, b:Number, c:Number):Number // а слон гиде? (тут возвращаем число..)
{
return (a+b+c);
}
var newValue:Number = sum(4, 32, 78);
trace(newValue); // Выведет: 114
З.Ы. как в коде цветом выделять?(

iNils
27.03.2009, 20:54
З.Ы. как в коде цветом выделять?(
http://www.flasher.ru/forum/showthread.php?t=122539

elcard
31.03.2009, 12:07
Спасибо iNils

Код работает исправно:
function getXML()
{
my_xml.ignoreWhite = true;
my_xml.parseXML(my_xml.toString());
//trace(my_xml);

var vars:Array = new Array();

_root.date_ = my_xml;

_root.date_ = _root.date_.firstChild;
_root.date_ = _root.date_.firstChild;

vars[0] = _root.date_.attributes.name;
_root.date_ = _root.date_.nextSibling;
vars[1] = _root.date_.attributes.name;
_root.date_ = _root.date_.nextSibling;
vars[2] = _root.date_.attributes.name;
_root.date_ = _root.date_.nextSibling;
vars[3] = _root.date_.attributes.name;

return vars;
}

var my_xml:XML = new XML();
my_xml.load("test.xml");

my_xml.onLoad = function(saccess:Boolean)
{
var vars = getXML();
trace(vars);
}

Bred45
01.04.2009, 15:46
Не совсем в тему вопрос, но хочу спросить iNils о причинах использования класса Delegate. Чтобы иметь гибкость при выборе имени функции (onLoadXML)?

iNils
02.04.2009, 20:24
о причинах использования класса Delegate. Чтобы иметь гибкость при выборе имени функции (onLoadXML)?
Нет, для контроля области видимости внутри функции. В onLoad this ссылается на сам xml, а не на объект в котором мы создали xml.