Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как правильно написать код (http://www.flasher.ru/forum/showthread.php?t=114128)

sospamom 18.07.2008 21:59

Как правильно написать код
 
Код:

package code {
        import flash.display.*;
        import flash.text.*;
        import flash.events.*;
        import flash.net.*;
        import flash.ui.Mouse;
        import flash.geom.Matrix;
               
        public class RSSAggregator extends Sprite{
               
                private var urlLoader:URLLoader;
               
                public function RSSAggregator(){
                        LoadXML();                       
                }
               
                private function LoadXML(){
                        var urlRequest:URLRequest = new URLRequest("lol.xml");
                        urlLoader = new URLLoader( );
                        urlLoader.addEventListener(Event.COMPLETE, completeListener);
                        urlLoader.load(urlRequest);
                }
               
                private function completeListener(e:Event):void {
                        var xml:XML = new XML(urlLoader.data);
                        var main:TextField = new TextField();
                        addChild(main);
                        main.text = xml.toXMLString();
                }
               
        }
}

Начинаю изучать программирование вообще и в частности на AS3.

Как правильно написать вышеприведённый работоспособный код? Мне кажется для загрузки файла и для его вывода в TextField должны быть созданы два дополнительных класса или это должно выглядеть ещё как-то но только не так? Ведь основной код начинает засоряться всякими
Код:

private var urlLoader:URLLoader;
и вообще скоро потеряет ясность. Но я не представляю как это правильно должно выглядеть.

ramshteks 18.07.2008 22:19

так как судя по твоему коду видно что твой URLLoader больше нигде не используется то строчку
Код:

private var urlLoader:URLLoader;
удалить и функцию loadXML
написать вот так:

Код:

private function LoadXML(){
                       
                        var urlLoader:URLLoader = new URLLoader( );
                        urlLoader.addEventListener(Event.COMPLETE, completeListener);
                        urlLoader.load(new URLRequest("lol.xml"));
                }

а слушатель к нему так:

Код:

private function completeListener(e:Event):void {
                        var xml:XMLDocument = new XMLDocument ();
                                xml.parseXML(evt.target.data)
                        var main:TextField = new TextField();
                        addChild(main);
                        main.text = xml.toXMLString();
                }

ну это то что можно слету предложить... дальше все зависит от нужд...
судя по названию класса это рсс... ну как я раньше делал, исходя из своего задания, я писал еще один класс, который дожен был работать только с одним полем <item> в рсс( не уверен что верно назвал это полем, скорее содержимым тэга)

Удачи!
Читай Макконела)

sospamom 18.07.2008 22:36

Спасибо! А как бы ещё сделать так, чтобы всё не было в одной куче? Сейчас то код маленький, но потом например код отображения в TextField разростётся итп.

А что конкретно Макконела?

ramshteks 18.07.2008 22:53

макконела, совершенный код, советую купить эту книгу и читать перед сном))

ну скажем так... код довольно таки приемлем, но не совсем понятно что нужно сделать, а поэтому - сложно сказать как можно улучшить код...
просто нужно сразу определится что в дальнейшем тебе нуно будет а что нет, что нужно обьявляй членом класса так сказать, а что не нужно обьявляй в функци( ибо после того как функция отработает насколько я знаю, все обьявленное в ней удаляется из памяти)

еще конечно стоило бы удалить слушатель, прямо в функии completeListener


Код:

private function completeListener(e:Event):void {
                        var xml:XMLDocument = new XMLDocument ();
                                xml.parseXML(evt.target.data)
                        var main:TextField = new TextField();
                        addChild(main);
                        main.text = xml.toXMLString();
                                  evt.target.addEventListener(Event.COMPLETE, completeListener);// хотя не совсем уверен что это необходимо...
                }

ну и если честно глаза режет тот фкт что вы обьявляете тексфилд в функции а не членом класса. у вас потом просто не будет возможности работать с ним...

ign 20.07.2008 13:10

2ramshteks
Цитата:

ну и если честно глаза режет тот фкт что вы обьявляете тексфилд в функции а не членом класса. у вас потом просто не будет возможности работать с ним...
Он возьмет его из дисплей листа ^_^

vic_ 20.07.2008 13:32

Цитата:

Сообщение от ign (Сообщение 753182)
2ramshteks

Он возьмет его из дисплей листа ^_^

И потом каждый раз когда понадобится будет брать из дисплей листа? И так все остальные DisplayObjects? Или только для этого текстфилда будет исключение? Нечитабельно и getChildByName работает перебором, ресурсы.

etc 20.07.2008 15:29

Цитата:

Сообщение от vic_ (Сообщение 753187)
getChildByName работает перебором

Откуда такая информация?

vic_ 20.07.2008 17:58

Цитата:

Сообщение от __etc (Сообщение 753209)
Откуда такая информация?

Где то читал, не помню. Это не так?

BlooDHounD 20.07.2008 18:14

vic_, нет конечно :)

vic_ 20.07.2008 18:26

ок, надо будет сравнить время обращения по индексу и по имени


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

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