Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Очень большая xml-ка (http://www.flasher.ru/forum/showthread.php?t=105574)

JaLav 04.01.2008 15:25

ок, спасибо Вам, что попытались мне помочь

тут я вижу люди скачивают исходник, но без xml
xml тоже надо скачать и закинуть в ту же папку, что и swf (
swf грузит xml)

wvxvw 04.01.2008 18:19

Результаты такие же, как и у iNils'a кнопка реагирует, единственное, в исходнике у кнопки instanceName не указан, а так все нормально.

JaLav 04.01.2008 19:08

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

Понимаю, что это немного нелогично, товарищ MrPoma правильно сказал
Цитата:

грамотнее дать посетителю выбор, что грузить, а что нет
но все же хотелось узнать теоретически, можно ли так делать

Вывод: так делать не желательно, потому что есть такие компы, как у меня (Атлон 1800), на которых в подобной ситуации флеш тормозит.:-)

MrPoma 04.01.2008 19:18

еще все зависит от скорости соединения

JaLav 04.01.2008 20:10

да, но у меня и локально так же

wvxvw 04.01.2008 20:27

Вот, пример накатал. Смысл в том, что грузится ХМЛ порциями. Этот класс так же умеет вещать загрузку следующей порции, ошибку и завершение загрузки. Так же можно узнать текщий номер загрузки, ну и вообще, переделывайте как вам надо =).

Сам класс:
Код:

import mx.utils.Delegate;
//
class CXMLLoader {
        private var nextChapter:Number = 0;
        private var __xml:XML;
        private var xml2load:XML;
        private var __url:String = "";
        private var __type:String = "";
        private var __totalNodes:Number = 0;
        //
        public var addListener:Function;
        public var broadcastMessage:Function;
        function CXMLLoader(){
                _global.AsBroadcaster.initialize(this);
                __xml = new XML('<rootNode />');
        }
        private function loadNext():Void {
                xml2load = new XML();
                xml2load.ignoreWhite = true;
                xml2load.onLoad = Delegate.create(this,handleOnLoad);
                switch(__type){
                        case "XML":
                                xml2load.load(__url+nextChapter+'.xml');
                                break;
                        case "PHP":
                                xml2load.load(__url+'.php?xml='+nextChapter);
                                break;
                }
        }
        public function startLoading(url:String,type:String,totalNodes:Number):Void {
                __url=url;
                __type=type;
                __totalNodes=totalNodes;
                loadNext();
        }
        private function handleOnLoad(b:Boolean):Boolean {
                if(b){
                        for(var i:Number=0; i<xml2load.childNodes.length; i++){
                                __xml.childNodes[0].appendChild(xml2load.childNodes[0]);
                        }
                        broadcastMessage('loadingNodeDone', xml2load);
                        if(__totalNodes>__xml.childNodes[0].childNodes.length){
                                nextChapter++;
                                loadNext();
                        } else {
                                broadcastMessage('loadingDone', __xml);
                        }
                } else {
                        broadcastMessage('loadingError', __xml, nextChapter);
                }
                return b;
        }
        public function set cRequest(n:Number):Void {
                return;
        }
        public function get cRequest():Number {
                return nextChapter;
        }
        public function set nodesLoaded(n:Number):Void {
                return;
        }
        public function get nodesLoaded():Number {
                return __xml.childNodes[0].childNodes.length;
        }
}

Пример использования:
Код:

var cxmll:CXMLLoader = new CXMLLoader();
var m_xml:XML;
cxmll.addListener(this);
function loadingNodeDone(_xml:XML){
        trace('loadingNodeDone >> listener: '+_xml);
        trace('=============== finished loading node # '+cxmll.cRequest+' ===============');
        trace('=============== loaded so far '+cxmll.nodesLoaded+' nodes ===============');
};
function loadingDone(_xml:XML){
        m_xml = _xml;
        trace('loadingDone >> listener: '+_xml);
};
cxmll.addListener(this);
cxmll.startLoading('test','XML',23);

Примерный ХМЛ (в моем случае их было 7 штук):
Код:

<!-- test0.xml -->
<city id='28' longitude='-117.89' latitude='33.74' photos='0' users='0' hostels='0' locationurl='hostels-a-city-n-28.html'>Santa Ana, CA</city>
<city id='33' longitude='-122.85' latitude='39.12' photos='0' users='0' hostels='0' locationurl='hostels-a-city-n-33.html'>Nice, CA</city>
<city id='40' longitude='-121.33' latitude='36.42' photos='0' users='1' hostels='0' locationurl='hostels-a-city-n-40.html'>Soledad, CA</city>
<city id='46' longitude='-117.914' latitude='33.8353' photos='0' users='0' hostels='2' locationurl='hostels-a-city-n-46.html'>Anaheim, CA</city>
<city id='57' longitude='-109.03' latitude='48.58' photos='0' users='0' hostels='0' locationurl='hostels-a-city-n-57.html'>Zurich, MT</city>

Немного еще добавил информации.

JaLav 04.01.2008 21:33

Спасибо Вам огромное, что столько накатали:)!
Пойду разбираться


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

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