Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.03.2007, 21:53
AlexSol вне форума Посмотреть профиль Отправить личное сообщение для AlexSol Найти все сообщения от AlexSol
  № 1  
Ответить с цитированием
AlexSol

Регистрация: Dec 2005
Сообщений: 316
По умолчанию Класс для работы с xml

задача такая: разобрать 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']);
};
файл xml
Код:
<?xml version="1.0" encoding="UTF-8"?><reply status="ok" mode="image"><image url="image_url"></image></reply>

Старый 24.03.2007, 14:04
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: 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];
		}
	}
}
Код:
import MyXML;
myXML = new MyXML();
myXML.load('test.xml');
onParse = function(event) {
    trace((event.target==myXML)+','+event.type);
    trace(myXML.node1.status);
}
myXML.addEventListener('onParse',this);
Не проверял, но работать должно.

Старый 24.03.2007, 15:51
AlexSol вне форума Посмотреть профиль Отправить личное сообщение для AlexSol Найти все сообщения от AlexSol
  № 3  
Ответить с цитированием
AlexSol

Регистрация: Dec 2005
Сообщений: 316
спасибо, работает.
EventDispatcher отвалился когда скрипт сюда копировал.

как этот класс надо изменить, чтобы onParse стало событием этого класса? тоесть чтоб вызывалось
Код:
myXML.onParse = function() {}
?

Старый 24.03.2007, 15:57
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Код:
public var onParse:Function;
…
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'});
			onParse();
		} else {
			trace('XML load error')
		}
Но не делают так в AS2, делают так, как я написал, т.е. подписываются на событие, а не делают присвоение новой функции.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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