Показать сообщение отдельно
Старый 24.04.2012, 23:12
A.E.M. вне форума Посмотреть профиль Отправить личное сообщение для A.E.M. Найти все сообщения от A.E.M.
  № 9  
Ответить с цитированием
A.E.M.
 
Аватар для A.E.M.

Регистрация: Jun 2007
Сообщений: 61
Отправить сообщение для A.E.M. с помощью ICQ
Цитата:
Сообщение от expl Посмотреть сообщение
не знаю что за ошибка, у меня всё выводится

Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
 
	/**
	 * ...
	 * @author 
	 */
	[Frame(factoryClass="Preloader")]
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			_loader = new URLLoader(new URLRequest("http://www.oreillynet.com/pub/feed/29"));
			_loader.addEventListener(Event.COMPLETE, onLoadComplete);
		}
 
		private var _loader:URLLoader;
 
		private function onLoadComplete(event:Event):void
		{
			var xml:XML = new XML(_loader.data);
			var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
			default xml namespace = ATOM;
			for each (var entry:XML in xml.entry)
			{
				trace("title=" + entry.title);
			}
		}
 
	}
 
}
вот все файлы приложения, попробуйте пожалуйста, может разберетесь

ListDisplayList.as

Код AS3:
package{
	import flash.text.TextField;
 
	public class ListDisplayField extends TextField implements IListDisplay{
 
		private var aList:Array;
 
		public function ListDisplayField(){
 
			super(); // вызываем конструктор TextField
			this.clear();
 
		}
 
		public function addItem(s:String):void{
 
			this.aList.push(s);
			this.update();
 
		}
 
		public function deleteItemAt(i:uint):Boolean{
 
			if((i > 0) && (i <= aList.length)){
 
				aList.splice(i-1, 1);
				this.update();
				return true;
 
			} else {
 
				return false;
			}
		}
 
		public function clear():void{
 
			aList = [];
			this.update();
 
		}
 
		internal function update(){
 
			var listText:String = "";
 
			//обраюотаем массив для создания строки, разделенной переводами каретки
			for (var i:Number = 0; i < aList.length; i++){
 
				listText += aList[i] + "\r";
 
			}
 
			super.text = listText;
 
		}
 
		override public function set text(s:String):void{
 
			throw new Error("Cannot directly set text property - use addItem() method");
 
		}
 
		override public function set htmlText(s:String):void{
 
			throw new Error("Cannot directly set htmlText property");
 
		}
 
		override public function appendText(s:String):void{
 
			throw new Error("Cannot append text - use addItem() method");
 
		}
 
		override public function replaceSelectedText(s:String):void{
 
			throw new Error("Cannot replace selected text");
 
		}
 
		override public function replaceText(beginIndex:int, endIndex:int, newText:String):void{
 
			throw new Error("Cannot replace text");
 
		}
	}
}
IListDisplay.as

Код AS3:
package{
 
	public interface IListDisplay{
 
		function addItem(s:String):void;
		function deleteItemAt(n:uint):Boolean;
		function clear():void;
	}
}
Client1.as - базовый

Код AS3:
package{
 
	// Клиент, выводящий список книг издательства посредством адаптера ListDisplayField
	import flash.display.MovieClip;
	import flash.text.*;
	import flash.events.*;
	import flash.net.*;
 
	public class Client1 extends MovieClip{
 
		var xml:XML;
		var xmlLoader:URLLoader;
		var newBookListField:ListDisplayField;
 
		public function Client1(){
 
			//Создаем ListDisplayField (адаптер)
			var newBookListField:ListDisplayField = new ListDisplayField();
 
			//Выбираем стиль текста
			var format:TextFormat = new TextFormat();
			format.size = 14;
			format.font = "Arial";
 
			//Устанавливаем стиль и положение текстового поля
			newBookListField.x = 20;
			newBookListField.y = 20;
			newBookListField.width = 500;
			newBookListField.height = 300;
			newBookListField.border = true;
			newBookListField.defaultTextFormat = format;
 
			//Создаем список из O'Reilly New Books Feed (Atom)
			var newBooksURL = "http://www.oreillynet.com/pub/feed/29";
			xml = new XML();
			var xmlURL:URLRequest = new URLRequest(newBooksURL);
			xmlLoader = new URLLoader(xmlURL);
			xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 
			//Добавляем текстовое поле в список отображения
			addChild(newBookListField);
		}
 
		private function xmlLoaded(evtObj:Event){
 
			var xml = XML(xmlLoader.data);
			//устанавливаем пространство имен xml по умолчанию
			if (xml.namespace("") != undefined){
				var ATOM:Namespace = new Namespace("http://www.w3.org/2005/Atom");
				default xml namespace = ATOM;
			}
			//Добавляем в ListDisplayField названия новых книг
			for each (var bookTitle:XML in xml..entry.title){
 
					newBookListField.addItem(bookTitle.toString());
				}
 
		}
	}
 
}
Добавлено через 7 минут
в первом файле не верно имя написал, правильно: ListDisplayField.as

Добавлено через 22 минуты
вот так кстати у меня тоже выводит
Код AS3:
for each (var bookTitle:XML in xml.entry){
					trace("title=" + bookTitle.title);
					//newBookListField.addItem(bookTitle.title);
				}
а вот так нет, вот так выдается эта ошибка

Код AS3:
for each (var bookTitle:XML in xml.entry){
					//trace("title=" + bookTitle.title);
					newBookListField.addItem(bookTitle.title);
				}
хотя почему не понятно, метод addItem определен в классе ListDisplayField, в качестве параметра берет строку, с другим клиентом работает, с этим нет.
__________________
Да будет ФЛЭШ !