![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2008
Сообщений: 21
|
Столкнулся в 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, а остальные не хочет. **По идее, этих ошибок вообще не должно возникать, потому что все указанные выше методы не имеют отношения к массиву текстовых полей, а к конструктору и к лоадеру. Но если не работать с массивом, ошибок не выдает и все работает нормально. Далее идет скрипт, мож кто увидит в чем ошибся, пока не нашел сам… Листинг: 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; } } } } |
|
|||||
|
ну хотя бы тот факт что ii не проинициализирована может вызывать ошибку
|
|
|||||
|
Плохая привычка искать ошибки в чистом поле.
Дебажить надо.
__________________
Сам себе репортер |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Для начала покажите загружаемый XML. Судя по коду, вы пытаетесь найти подузлы DATE и TXT, хотя у меня есть подозрение, что это атрибуты.
|
|
|||||
|
Регистрация: Dec 2008
Сообщений: 21
|
Ошибка была тут:
В цикле for-each-in перебирается каждый элемент и соответственно в каждый элемент вектора заносится. Нужно было просто убрать [ii] в обращении к объекту класса XML. А инициализация… это просто на следующих этапах разработки. int при разработке по умолчанию в 0 инициализируется. Добавлено через 45 секунд Цитата:
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|