Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
23 Июль 2025, 07:44:29
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование
(Модераторы: Админ, barmalei) > Тема:

ActionScript 3.0 - асинхронность чтоб ее (((

Страниц  :   Вниз
  Печать  
Автор Тема: ActionScript 3.0 - асинхронность чтоб ее (((  (Прочитано 1535 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Легенда Фанка
----- Go 70's! -----
Гродненец
**

Репутация: +22/-0
Offline Offline

Пол: Мужской
Сообщений: 294


SoulBrother

Просмотр профиля
« : 10 Февраль 2010, 20:43:48 »

Здравствуйте кликнувший.
Не могу осилить логику AS3. Ситуация проста: класс загружает XML. Такой вот код (класс "getxml"):

package{
   import flash.display.MovieClip;
   import flash.events.Event;
   import flash.net.URLLoader;
   import flash.net.URLRequest;
   
   public class getxml extends MovieClip {
      var myXML:XML = new XML();
        var XML_URL:String = "wb_base.xml";
        var myXMLURL:URLRequest = new URLRequest(XML_URL);
        var myLoader:URLLoader = new URLLoader(myXMLURL);
 
      public function getxml():void {
         myLoader.addEventListener("complete", xmlLoaded);
   
      }
      
       function xmlLoaded(event:Event):void {
         myXML = XML(myLoader.data);
       }

   }
}
Работает всё как надо. Один нюанс: как дальше работать с заполненым "myXML" ? Т.е.если я в любом методе, который опишу дальше, вызову myXML - то равен он будет null, т.к. getxml() есче не сработал. Такое вот ситуациё.

Записан

не важно, друг, где начнем, важно, друг, где закончим © хе-хе-хе
RILLey_ELf
Гость
« Ответ #1 : 10 Февраль 2010, 22:18:52 »

function xmlLoaded(event:Event):void {
         myXML = XML(myLoader.data);
       }

в этой функции юзай твой XML или копай в атрибут класса getxml, но не забудь о том что xmlLoaded может работать в отдельном потоке.

а вообще читать надо что такое event и eventListener
Записан
spammer
Почетный гродненец
*****

Репутация: +78/-19
Offline Offline

Пол: Мужской
Сообщений: 1455


Пыхнуть не хотите?

Просмотр профиля
« Ответ #2 : 11 Февраль 2010, 10:12:08 »

URLLoader.data доступен только после диспатча "complete" события от URLLoader, как и написано в доках. Следовательно, получить XML (посредством каста URLLoader.data в XML), можно либо в обработчике этого события, либо после этого обработчика (т.к. по сути AS3 имеет только один поток исполнения, и конкурентно влезть наряду с обработчиком не получится).

Стандартный вариант, метод getXML() будет возвращать null до тех пор, пока не завершена загрузка (инициируется вызовом load()), при успешной загрузке сам объект диспатчнет "complete" событие (стандартный паттерн асинхронности AS3, построенной на событиях и листенерах):

Код:
package {

import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLLoader;
import flash.net.URLRequest;

[Event(name="complete", type="flash.events.Event")]
public class AsyncXML extends EventDispatcher {

private var _xml:XML;
public function get xml():XML {
return _xml;
}

private var url:String;
private var loader:URLLoader;

public function AsyncXML(url:String) {
this.url = url;
}

public function load() {
if (loader != null) return;

var request:URLRequest = new URLRequest(url);
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loaderComplete);
loader.load(request);
}

private function loaderComplete(event:Event):void {
try {
_xml = new XML(loader.data);
} catch (e:TypeError) {
trace(e.getStackTrace());
}

loader.removeEventListener(Event.COMPLETE, loaderComplete);
loader = null;

if (_xml != null) {
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
}
« Последнее редактирование: 11 Февраль 2010, 23:37:17 от spammer » Записан
Легенда Фанка
----- Go 70's! -----
Гродненец
**

Репутация: +22/-0
Offline Offline

Пол: Мужской
Сообщений: 294


SoulBrother

Просмотр профиля
« Ответ #3 : 11 Февраль 2010, 22:13:01 »

spammer классный скрипт. Только пара ошибок:

  1136: Incorrect number of arguments.  Expected 1. == loader.load();
  1067: Implicit coercion of a value of type String to an unrelated type flash.events:Event. == dispatchEvent(Event.COMPLETE);


Возможно первая решается путем подстановки параметра "request", а вот вторая вызывает затруднение.
Записан

не важно, друг, где начнем, важно, друг, где закончим © хе-хе-хе
spammer
Почетный гродненец
*****

Репутация: +78/-19
Offline Offline

Пол: Мужской
Сообщений: 1455


Пыхнуть не хотите?

Просмотр профиля
« Ответ #4 : 11 Февраль 2010, 23:27:19 »

ну да, набирал без компилятора Улыбка поправил код
Записан
Страниц  :   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2025, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,1 секунд. Запросов: 20.