Просмотр полной версии : Проблема с чтением xml из функции
Добрый день,
проблема в следующем. написал функцию, с помощью которой хочу прочитать xml-файл. Если размещать код прямо на кадре все работает отлично. Если же поместить данный код в функцию, то xml не читается. Подскажите в чем ошибка.
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.
Спасибо)с этим разобрался. Вопрос такого плана, чисто по функции onLoad
насколько я понял, используя trace, эта функция отрабатывает в самом конце программы, т.е. trace написанный в обработчике этой функции всегда выводится последним. Почему так и можно ли это как-то изменить? например использовав #initclip
Нельзя приготовить омлет не разбив яйца. onLoad срабатывает когда данные загружены, и трейс в нем соответственно тоже.
Поэтому логику приложения надо изменить, разбив ее на три части.
1. Работа приложения не основанная на данных из xml
2. Ожидание загрузки xml
3. Работа приложения основанная на данных из xml
про омлет не вопрос.и все вроде бы хорошо, но у меня вопрос вот какой
создал класс.в нем прописал помимо конструктора две функции.
1) читает xml
2) просто заполняет какой-то левый массив левыми данными
объявляю переменную моего класса, сначала вызываю функцию чтения xml, и потом уже вызываю вторую левую функцию.
смотрю через trace - сначала он выполнил вторую функцию, после нее только прочитал xml, не смотря на то, что xml идет раньше....
почему так?!
сам класс
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);
}
}
как вызываю
var d:Diagram = new Diagram(_root);
d.setData(_root);
d.testArray();
Mnilionic
08.04.2009, 00:58
пример:
1, вы звоните другу и говорите ему, чтоб он приехал к вам с пивом - будите телек смотреть.
2, вы включаете телевизор.
что случится раньше: приедет друг или нагреется кинескоп телевизора? а если поменять операции местами?
телевизору плевать, когда приедет ваш друг и приедит ли он вообще - вы его включили он работает.
какие-нибудь пути решения?
http://www.flasher.ru/forum/showthread.php?t=123233
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.