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

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

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

Регистрация: Apr 2008
Сообщений: 82
По умолчанию Оболочка XML.

Пишу класс, наследующий XML. Хочу добавить методы свои и стойства.
Код:
class hvClasses.CDataNode extends XML
{
	private var xmlData:XML;
.............
        public function byStr(index:String):CDataNode
	{
		var res:CDataNode = null;
		for (var i = 0; i<=xmlData.childNodes.length-1; i++)
		{
			if (xmlData.childNodes[i].nodeName == index)
			{
				res = CDataNode(xmlData.childNodes[i]);
				break;
			}
		}
		return res;
	}
Конструирование, насколько можно судить по результатам последующей загрузки данных, проходит. Результаты я смотрю соответственно так:
Код:
var myNode = new CDataNode();
myNode.ignoreWhite = true;
myNode.loadFromFile("circus.xml");
myNode.onLoad = function(success) {
//	trace(myNode);
	trace(myNode.status);
	trace(myNode.byStr('body'));
//	trace('count ' + myNode.byStr('body').byStr('hall').count);
//	trace('attrs ' + myNode.byStr('body').byStr('hall').attrCount);
//	trace('depth ' + myNode.byStr('body').byStr('hall').depth(true));
}
Но метод byStr мало того, что не работает, при попытке дебажить ваще виснет всё напрочь и схлопывается потом. loadFromFile - тоже переписанный метод, и если его поставить в конец блока - ничего не изменится.

Старый 20.04.2008, 22:35
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
глянь, такой тест вполне себе работает:
Код:
class CDataNode extends XML
{
	public function CDataNode(text:String) 
	{
		super(text);
	}
	public function byStr(index:String):CDataNode
	{
		for (var i = 0; i<=childNodes.length; i++)
		{
			var node:CDataNode = childNodes[i];
			if (node.nodeName == index)
			{
				return node;
			}
		}
		return null;
	}
}
Код:
var myXML:CDataNode = new CDataNode("<body>test</body>");
var bodyNode:CDataNode = myXML.byStr("body");
trace( "bodyNode : " + bodyNode );//bodyNode : <body>test</body>
что происходит у тебя из этих обрывков ни понять не протестировать невозможно..

Старый 21.04.2008, 16:43
Ruffus вне форума Посмотреть профиль Отправить личное сообщение для Ruffus Найти все сообщения от Ruffus
  № 3  
Ответить с цитированием
Ruffus
 
Аватар для Ruffus

Регистрация: Apr 2008
Сообщений: 82
Спасибо, работает.
Получается, что явное приведение типов не срабатывает, а срабатывает неявное.
А если мне надо написать что-то типа
Код:
public function get parent():СDataNode
	{
		return СDataNode(this.parentNode);
	}
Тут вроде неявное не прокатывает уже, потому что у parentNode тип не XML, а XMLNode.

Старый 22.04.2008, 10:52
Ruffus вне форума Посмотреть профиль Отправить личное сообщение для Ruffus Найти все сообщения от Ruffus
  № 4  
Ответить с цитированием
Ruffus
 
Аватар для Ruffus

Регистрация: Apr 2008
Сообщений: 82
Непонятно, почему метод byStr не даёт себя вызвать 2 раза подряд, например:
Код:
var node:DataNode = myNode.byStr('body').byStr('info');
trace(node.nodeName);
Никакие попятки приведения типов в методах parent и root почему-то не срабатывают.

Старый 22.04.2008, 12:41
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
ты прав, надо внимательнее с типами
byStr в предыдущем варианте возвращает XMLNode, а не CDataNode, декларация var node:CDataNode = childNodes[i]; ничего не дает, компилятор просто не может проверить тип childNodes[i]..
должно быть, видимо, так (хотя и не очень понятно зачем оно) :
Код:
class CDataNode extends XML
{
	public function CDataNode(text:String) 
	{
		super(text);
	}
	public function byStr(index:String):CDataNode
	{
		for (var i = 0; i<=childNodes.length; i++)
		{
			var node:XMLNode = childNodes[i];
			if (node.nodeName == index)
			{
				var newCDataNode:CDataNode = new CDataNode(node.firstChild.toString());
				return newCDataNode;
			}
		}
		return null;
	}
}

Старый 22.04.2008, 16:20
Ruffus вне форума Посмотреть профиль Отправить личное сообщение для Ruffus Найти все сообщения от Ruffus
  № 6  
Ответить с цитированием
Ruffus
 
Аватар для Ruffus

Регистрация: Apr 2008
Сообщений: 82
А зачем тут firstChild в аргументе конструктора?

Старый 22.04.2008, 16:44
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
дада, сори
действительно, нужны же все дети:
Код:
class CDataNode extends XML
{
	public function CDataNode(text:String) 
	{
		super(text);
	}
	public function byStr(index:String):CDataNode
	{
		for (var i = 0; i<=childNodes.length; i++)
		{
			var node:XMLNode = childNodes[i];
			if (node.nodeName == index)
			{
				var xmlStr:String = node.childNodes.join("");
				var newCDataNode:CDataNode = new CDataNode(xmlStr);
				return newCDataNode;
			}
		}
		return null;
	}
}

Старый 22.04.2008, 16:50
Ruffus вне форума Посмотреть профиль Отправить личное сообщение для Ruffus Найти все сообщения от Ruffus
  № 8  
Ответить с цитированием
Ruffus
 
Аватар для Ruffus

Регистрация: Apr 2008
Сообщений: 82
Блин, при реализации через toString() как -то не так всё получается, внешний узел имени не имеет, ему соответствующий текст из документа попадает в содержимое узла...

Спасибо.
Но вообще, при создании новых объектов связи теряются с родительскими
элементами, дерево ломается. Надо как-то по-дургому выпутываться..


Последний раз редактировалось iNils; 22.04.2008 в 17:03.
Старый 22.04.2008, 17:15
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
мне кажется нелогично в такой затее наследоваться от XML, имхо от XMLNode было бы складнее..
а так получаешь, то что есть..

Старый 22.04.2008, 22:19
Ruffus вне форума Посмотреть профиль Отправить личное сообщение для Ruffus Найти все сообщения от Ruffus
  № 10  
Ответить с цитированием
Ruffus
 
Аватар для Ruffus

Регистрация: Apr 2008
Сообщений: 82
Блин, так куда денутся проблемы с приведением типов?
Кроме того, я потеряю status и onLoad, к примеру.

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

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

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


 


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


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