Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос по xml (http://www.flasher.ru/forum/showthread.php?t=209789)

Godwarlock 21.12.2014 18:45

Вопрос по xml
 
Всем привет. Возник вопрос по загрузке данных из xml

Код AS3:

        public function LOGIN():void
                {
        url_loader.addEventListener(Event.COMPLETE, CL_COMPLETE);
url_loader.load('script.php');
 
}
 
 
        public function CL_COMPLETE(e:Event = null):void
                {
        if (e.target.data)
                        {
 
                                xml = XML(e.target.data);
trace(xml);
}
}

В данном коде класса выгружаем данные из xml. Но они выгружаются один раз. То есть в дальнейшем, xml получает другие значения, но чтобы они обновились во flash, нужно заново запустить LOGIN();
Но после запуска данной функции, данные выгружаются не сразу и если к примеру код такой будет

Код AS3:

function age():void
{
CL.LOGIN(); //CL - класс в котором находится ф-ция LOGIN();
if(CL.xml.user_age <= 3)
{
trace("Тратата");
}
}

Ф-ция age завершится до того, как xml.user_age получит новое значение, от того скрипт надо либо вызывать дважды, а то и трижды или фиг знает че вообще можно сделать. Мне нужно, чтобы условие срабатывало только после того, как xml получит свои значения. Конечно в каждом классе можно создавать новую xml переменную. Но не знаю насколько это будет правильно и удобно, вроде проще обращаться к одному xml из других классов

Gerbert 21.12.2014 19:10

Если Вы из разных классов запускаете загрузку одного и того же xml,
то лучше при первой загрузке этот xml перевести в object.
Если xml каждый раз разные, то нужно делать систему для
обработки синхронных действий. То есть, в классе, в котором Вы
вызываете LOGIN можно сделать например так
Код AS3:

_sync = new CustomSyncClass( this.completeHandler );

А в классе CustomSyncClass сделать подписку на загрузку и ошибки.

Godwarlock 21.12.2014 19:20

А как его в object перевести?

Gerbert 21.12.2014 20:15

Цитата:

А как его в object перевести?
Я ошибся, xml у as3 нативный. Тогда либо загрузите и сохраните ссылку на него
либо второй вариант.

Godwarlock 22.12.2014 00:14

Цитата:

А в классе CustomSyncClass сделать подписку на загрузку и ошибки.
Не совсем понял, какую подписку на загрузку и ошибки?

Korchy 22.12.2014 11:53

Godwarlock
Если хочешь вынести логин в отдельный класс - чтобы ловить окончание загрузки извне, наследуй класс логина от EventDispatcher и по окончании загрузки, в твоем примере в функции CL_COMPLETE бросай событие о завершении: dispatchEvent(new Event(complete)); Тогда извне будешь точно так же подписываться на событие и ждать окончания загрузки
Код AS3:

function age():void
{
CL.LOGIN(); //CL - класс в котором находится ф-ция LOGIN()
cl.addEventListener(cl.complete,oncomplete);
}
private function oncomplete(e:Event):void {
// в этот момент данные о логине точно получены - работай с ними
}


Godwarlock 22.12.2014 14:33

col: 29 Error: Access of undefined property complete.
Вот что выдаёт. Если создать переменную complete её к типу string отнести?

Korchy 22.12.2014 16:02

Цитата:

Сообщение от Godwarlock (Сообщение 1176753)
col: 29 Error: Access of undefined property complete.
Вот что выдаёт. Если создать переменную complete её к типу string отнести?

Да. Это определение вида события, которое твой класс будет кидать. Как-то так:
Код AS3:

public static const complete:String = "MyLoginInfoLoadComplete";


Godwarlock 08.01.2015 02:54

Всё разобрался)


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

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