Форум 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.onLoad (http://www.flasher.ru/forum/showthread.php?t=76849)

jursit 13.03.2006 22:56

ловим XML.onLoad
 
Привет all!

Задача такая: пишется класс для загрузки XML, примерно так:
Код:

class Gallery extends XML
{
        var foto:Object;
        var dataXML:XML;
        var cats_url:String;
        var cat_id:Number;
        var cats_loaded:Boolean;
       
        function Gallery(param_url, param_cat_id)
        {
                this.cats_url = param_url;
                this.cat_id = param_cat_id;
                this.cats_loaded = false;
                this.init();
        };
        function load_ok()
        {
                cats_loaded = true;
        }
        function init()
        {
                this.dataXML = new XML();
                this.dataXML.ignoreWhite = true;
                this.dataXML.load(this.cats_url + "?cat=" + this.cat_id);
                this.dataXML.onLoad = load_ok;
        };

Не получается отследить процесс загрузки данных, this.dataXML.onLoad вызывает свойство load_ok(), не дожидаясь пока все загрузится.

Если писать так:
Код:

this.dataXML.onLoad = function(success) {
if (success) this.cats_loaded = true
}

то переменная cats_loaded не видна...

Как быть?

DmitryMV 13.03.2006 23:28

В твоём коде:
Код:

this.dataXML.onLoad = function(success) {
if (success) this.cats_loaded = true;
}

this ссылается на dataXML, а не на экземпляр класса Galery. Решение твоей проблеммы могу предложить следующее:
Код:

function init()
{
 ......
 ......
 this.dataXML = new XML();
 this.dataXML.linkToParent=this;
 ...
 ...
}

Код:

this.dataXML.onLoad = function(success) {
 if (success) this.linkToParent.cats_loaded = true;
 }

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

И зря ты пишешь Galery extends XML, это лишнее. Если ты так пишешь, то this.dataXML = new XML(); можно не писать. И все обращения к методам и свойствам XML будут выглядеть так:
Код:

this.ignoreWhite = true;
this.load(this.cats_url + "?cat=" + this.cat_id);
this.onLoad = load_ok;


silin 13.03.2006 23:56

зачем классу, наследующему XML, еще и объект XML..
что бы по простому не написать :
Код:

class Gallery extends XML
{
        var cats_loaded:Boolean;
        function Gallery(param_url, param_cat_id)
        {
                ignoreWhite = true;
                load(this.cats_url + "?cat=" + this.cat_id);

        };
        function onLoad(ok)
        {
                if(ok)cats_loaded = true;
        }
}


jursit 14.03.2006 00:17

Спасибо!
Раскрылись глаза (вот так широко .... )
Как раз то, что нужно!


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

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