Форум 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)
-   -   Проблема с чтением xml из функции (http://www.flasher.ru/forum/showthread.php?t=123642)

sereg 07.04.2009 11:16

Проблема с чтением xml из функции
 
Добрый день,
проблема в следующем. написал функцию, с помощью которой хочу прочитать xml-файл. Если размещать код прямо на кадре все работает отлично. Если же поместить данный код в функцию, то xml не читается. Подскажите в чем ошибка.
Код AS1/AS2:

class Diagram {
        public var len;
        public var my_xml;
 
        public function Diagram() {
                this.my_xml = new XML();
                this.my_xml.ignoreWhite = true;
                this.my_xml.onLoad = function(ok) {
                        if (ok) {
                                this.len = this.my_xml.childNodes[0].childNodes.length;
 
                        }
                }
                this.my_xml.load("data1.xml");
        }


Fatality 07.04.2009 11:50

Ну-ну. Вы не задумывались над тем, что в функции вызываемой как метод, this ссылается на объект из которого она вызвана. В вашем случае это — my_xml, у которого уж точно нет никакого свойтсва my_xml.

sereg 07.04.2009 12:31

Спасибо)с этим разобрался. Вопрос такого плана, чисто по функции onLoad

насколько я понял, используя trace, эта функция отрабатывает в самом конце программы, т.е. trace написанный в обработчике этой функции всегда выводится последним. Почему так и можно ли это как-то изменить? например использовав #initclip

iNils 07.04.2009 12:48

Нельзя приготовить омлет не разбив яйца. onLoad срабатывает когда данные загружены, и трейс в нем соответственно тоже.
Поэтому логику приложения надо изменить, разбив ее на три части.
1. Работа приложения не основанная на данных из xml
2. Ожидание загрузки xml
3. Работа приложения основанная на данных из xml

sereg 07.04.2009 22:38

про омлет не вопрос.и все вроде бы хорошо, но у меня вопрос вот какой
создал класс.в нем прописал помимо конструктора две функции.
1) читает xml
2) просто заполняет какой-то левый массив левыми данными

объявляю переменную моего класса, сначала вызываю функцию чтения xml, и потом уже вызываю вторую левую функцию.
смотрю через trace - сначала он выполнил вторую функцию, после нее только прочитал xml, не смотря на то, что xml идет раньше....

почему так?!

сам класс
Код AS1/AS2:

class Diagram extends MovieClip {
 
        public var arr:Array = new Array();
        public var len;
 
        public function Diagram(parent:Object) {
                parent.createEmptyMovieClip("mc", 20);
                //оси
                parent.mc.lineStyle(2, 0x000000, 100);
                parent.mc.moveTo(40, 50);
                parent.mc.lineTo(40, 350);
                parent.mc.moveTo(40, 350);
                parent.mc.lineTo(570, 350);
        }
        public function setData(parent:Object) {
                var my_xml = new XML();
                my_xml.ignoreWhite = true;
                my_xml.onLoad = function(ok) {
                        if (ok) {
                                len = my_xml.childNodes[0].childNodes.length;
                                trace(len);
                        }
                };
                my_xml.load("data1.xml");
        }
 
        public function testArray() {
                for (var i = 0; i<10; i++) {
                        this.arr[i] = "Hello"+i;
                }
                trace(len);
        }
}

как вызываю
Код AS1/AS2:

var d:Diagram = new Diagram(_root);
d.setData(_root);
d.testArray();


Mnilionic 08.04.2009 00:58

пример:
1, вы звоните другу и говорите ему, чтоб он приехал к вам с пивом - будите телек смотреть.
2, вы включаете телевизор.

что случится раньше: приедет друг или нагреется кинескоп телевизора? а если поменять операции местами?

телевизору плевать, когда приедет ваш друг и приедит ли он вообще - вы его включили он работает.

sereg 08.04.2009 02:35

какие-нибудь пути решения?

iNils 08.04.2009 02:37

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


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

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