Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Не получается вернуть массив из функции. (http://www.flasher.ru/forum/showthread.php?t=123233)

elcard 27.03.2009 19:59

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

Код AS1/AS2:

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

по моему вобще синтаксис не соблюден..из хелпа:
Код AS1/AS2:

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

Цитата:

Сообщение от nOobCrafter (Сообщение 808999)
З.Ы. как в коде цветом выделять?(

http://www.flasher.ru/forum/showthread.php?t=122539

elcard 31.03.2009 12:07

Спасибо iNils

Код работает исправно:
Код AS1/AS2:

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.


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

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