Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Flash+Vector.<TextField>+XML (http://www.flasher.ru/forum/showthread.php?t=119691)

stalkerweb 27.12.2008 18:36

Flash+Vector.<TextField>+XML
 
Столкнулся в AS3.0 с проблемой следующего характера.
Есть типизированный массив текстовых полей Vector.<TextField>. В каждое текстовое поле этого массива подгружается текстовая иноформация из внешнего XML-файла. При разработке вроде бы все правильно прописано, компилирует, но при запуске пишет ошибку в аутпуте следующего характера:

TypeError: Error #1010: Термин не определен и не имеет свойств.
at News/createNewsField()
at News/completeListener()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()**

При этом на стэйдже отображается только первое текстовое поле с текстом из XML, а остальные не хочет.

**По идее, этих ошибок вообще не должно возникать, потому что все указанные выше методы не имеют отношения к массиву текстовых полей, а к конструктору и к лоадеру. Но если не работать с массивом, ошибок не выдает и все работает нормально.

Далее идет скрипт, мож кто увидит в чем ошибся, пока не нашел сам…

Листинг:

Код AS3:

package  {
import flash.display.*;
import flash.text.*;
import flash.events.*;
import flash.net.*;
 
    public class NewsPrimitive extends Sprite {
 
        // Constants:
        // Public Properties:
        private var newsXML:XML;
        private var urlLoader:URLLoader;
        private var arrField:Vector.<TextField> = new Vector.<TextField>();
        // Private Properties:
 
        // Initialization:
        public function NewsPrimitive() {
        createGraphicsContainer();
        XMLLoader();
        }
 
        // Public Methods:
        public function XMLLoader() {
            var urlRequest:URLRequest = new URLRequest("news.xml");
            urlLoader = new URLLoader();
            urlLoader.addEventListener(Event.COMPLETE, completeListener);
            urlLoader.load(urlRequest);
        }
        // Protected Methods:
        private function completeListener(e:Event):void {
            newsXML = new XML(urlLoader.data);
            createNewsField(newsXML.BLOCK);
        }
 
        private function createGraphicsContainer():void {
            var graphicsContainer = new Sprite();
            addChild(graphicsContainer);
        }
 
        private function createNewsField(blocks:XMLList):void {
            var ii:int;
            for each (var block:XML in blocks) {
            arrField[ii]=new TextField();
            arrField[ii].text += "Date: " + block[ii].DATE +"\nText: " + block[ii].TXT + "\n\n";
            arrField[ii].autoSize = TextFieldAutoSize.CENTER;
            arrField[ii].y+= 100;
            addChild(arrField[ii]);
            ii+=1;
            }
        }
    }
 
}

Спасибо.

ramshteks 27.12.2008 19:55

ну хотя бы тот факт что ii не проинициализирована может вызывать ошибку

terbooter 27.12.2008 20:27

Плохая привычка искать ошибки в чистом поле.
Дебажить надо.

etc 28.12.2008 12:14

Для начала покажите загружаемый XML. Судя по коду, вы пытаетесь найти подузлы DATE и TXT, хотя у меня есть подозрение, что это атрибуты.

stalkerweb 28.12.2008 18:31

Ошибка была тут:

Код AS3:

arrField[ii].text += "Date: " + block[ii].DATE +"\nText: " + block[ii].TXT + "\n\n";

В цикле for-each-in перебирается каждый элемент и соответственно в каждый элемент вектора заносится. Нужно было просто убрать [ii] в обращении к объекту класса XML.

Код AS3:

arrField[ii].text += "Date: " + block.DATE +"\nText: " + block.TXT + "\n\n";

А инициализация… это просто на следующих этапах разработки. int при разработке по умолчанию в 0 инициализируется.

Добавлено через 45 секунд
Цитата:

Сообщение от __etc (Сообщение 786917)
Для начала покажите загружаемый XML. Судя по коду, вы пытаетесь найти подузлы DATE и TXT, хотя у меня есть подозрение, что это атрибуты.

Не, это были-таки узлы :)


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

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