![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2005
Сообщений: 316
|
задача такая: разобрать xml-файл и сообщить, что разбор закончен. С разбором проблем нет, ну и сообщение о завершение разбора приходит. Вопрос в том, насколько грамотно сделано сообщение об окончание разбора - может как-то проще можно?
класс: class xmlObj extends XML {
private var _url:String;
public var node1:Array;
public var node2:Array;
/////
private var dispatchEvent:Function;
public var addEventListener, removeEventListener:Function;
function xmlObj() {
node1 = new Array();
node2 = new Array();
this.ignoreWhite = true;
this.onLoad = function(success:Boolean) {
myparseXML(this);
};
////
EventDispatcher.initialize(this);
this.addEventListener('onParse', this);
dispatchEvent({type:'onParse'});
}
public function onParse() {
}
private function myparseXML(xml:XML) {
var node:XMLNode = xml.firstChild;
nodeToObject(node, node1);
var node:XMLNode = xml.firstChild.firstChild;
nodeToObject(node, node2);
dispatchEvent({type:'onParse'});
}
private function nodeToObject(node:XMLNode, obgect:Array) {
var attr;
for (attr in node.attributes) {
obgect[attr] = node.attributes[attr];
}
}
public function get getNode1():Array {
return node1;
}
}
import xmlObj;
var myXML:xmlObj = new xmlObj();
myXML.load("http://www.testphp.ru/draw/reply.xml");
myXML.onParse = function() {
var arr:Array = this.getNode1;
trace(arr['status']);
};
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Классы так не называют. Имена должны начинаться с прописной буквы.
EventDispatcher у тебя не работает совсем, ибо он не импортирован даже. Зачем подписывать самого себя? Если уж на то пошло, то должно быть примерно так: import mx.events.EventDispatcher;
class MyXML extends XML {
public var node1:Object;
public var node2:Object;
public var addEventListener:Function;
public var removeEventListener:Function;
private var dispatchEvent:Function;
public function MyXML() {
super();
EventDispatcher.initialize(this);
this.node1 = new Array();
this.node2 = new Array();
this.ignoreWhite = true;
}
private function onLoad(success:Boolean):Void {
if (success&&this.loaded&&!this.status) {
var node:XMLNode = this.firstChild;
nodeToObject(node, node1);
var node:XMLNode = this.firstChild.firstChild;
nodeToObject(node, node2);
dispatchEvent({type:'onParse'});
} else {
trace('XML load error')
}
}
private function nodeToObject(node:XMLNode, object:Object):Void {
for (var attr:String in node.attributes) {
object[attr] = node.attributes[attr];
}
}
}
|
|
|||||
|
Регистрация: Dec 2005
Сообщений: 316
|
спасибо, работает.
EventDispatcher отвалился когда скрипт сюда копировал. как этот класс надо изменить, чтобы onParse стало событием этого класса? тоесть чтоб вызывалось ? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Но не делают так в AS2, делают так, как я написал, т.е. подписываются на событие, а не делают присвоение новой функции.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:56. |
|
|
« Предыдущая тема | Следующая тема » |
|
|