Просмотр полной версии : Не получается вернуть массив из функции.
Не получается вернуть массив из функции. Вроде все перепробовал...
Внутри функции массив трейсится а получить его в руте не получается :(... есть идеи?
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();
И не получится. Загрузка, это асинхронная операция. То есть вы не можете в каком-то месте вызвать загрузку 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
З.Ы. как в коде цветом выделять?(
З.Ы. как в коде цветом выделять?(
http://www.flasher.ru/forum/showthread.php?t=122539
Спасибо 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);
}
Не совсем в тему вопрос, но хочу спросить iNils о причинах использования класса Delegate. Чтобы иметь гибкость при выборе имени функции (onLoadXML)?
о причинах использования класса Delegate. Чтобы иметь гибкость при выборе имени функции (onLoadXML)?
Нет, для контроля области видимости внутри функции. В onLoad this ссылается на сам xml, а не на объект в котором мы создали xml.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.