Цитата:
Сообщение от 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, в качестве параметра берет строку, с другим клиентом работает, с этим нет.