Форум 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=96618)

apetrusha 03.06.2007 18:33

область видимости в обработчике
 
Подскажите как из обработчика события сохранить данные в свойство класса.

в fla файлике код такой:

Код:

import test.loadinfo;
var myinfo = new loadinfo();
trace(myinfo.testinfo);

в классе loadinfo успешно загружаем xml, видим его структуру
дальше хотелось бы передать данные в класс для дальнейшей обработки
а не получается. Видим "Hi, there!" вместо "Hi, all!"
Подскажите, пожалуйста - где грабли?
Код:

package test{
        public class loadinfo {
        import flash.events.*;
        import flash.errors.*;
        import flash.net.*;
        public var testinfo:String;
       
    public function loadinfo():void {               
        this.testinfo = "Hi there!"; // задаем значение
        var xmlLdr:URLLoader = new URLLoader();
        xmlLdr.addEventListener("complete", completeLoadXML);
        xmlLdr.load(new URLRequest("info_list.xml"));               
    }
    private function completeLoadXML(event:Event):void {
              try {
            var info_xml:XML;
                  info_xml = new XML(event.target.data);
            //trace(info_xml);
            this.testinfo = "Hi all!";  // пытаемся переопределить значение
              } catch (error:Error) {
                      trace(error.message);
      }
    }
  }
}


BigDan 03.06.2007 18:36

во fla никто код не пишет

miramax 03.06.2007 19:06

Цитата:

Сообщение от BigDan
во fla никто код не пишет

Я пишу :rolleyes:
2apetrusha
Посмотрите на свой конструктор
Код:

        this.testinfo = "Hi there!"; // задаем значение
        var xmlLdr:URLLoader = new URLLoader();
        xmlLdr.addEventListener("complete", completeLoadXML);
        xmlLdr.load(new URLRequest("info_list.xml"));

В первой строке вы назначаете переменной testinfo значение "Hi there".
В третьей добаляете обработчик который менят это значение.
Сразу после создания loadinfo в главном тайм лайне вы вызываете свойство testinfo. Конечно же оно не изменится, т.к. completeLoadXML будет вызвана лишь спустя определённый промежуток времени. Когда xml файл будет загружен. Это происходит не сразу, т.к. загрузка асинхронна с кодом.
Попробуйет добавить trace в этот обработчик, и со временем всё станет понятно:
Код:

package test{
        public class loadinfo {
        import flash.events.*;
        import flash.errors.*;
        import flash.net.*;
        public var testinfo:String;
       
    public function loadinfo():void {               
        this.testinfo = "Hi there!"; // задаем значение
        var xmlLdr:URLLoader = new URLLoader();
        xmlLdr.addEventListener("complete", completeLoadXML);
        xmlLdr.load(new URLRequest("info_list.xml"));               
    }
    private function completeLoadXML(event:Event):void {
              try {
            var info_xml:XML;
                  info_xml = new XML(event.target.data);
            //trace(info_xml);
            this.testinfo = "Hi all!";  // пытаемся переопределить значение
                trace(this.testinfo);
              } catch (error:Error) {
                      trace(error.message);
      }
    }
  }
}


apetrusha 03.06.2007 19:39

Спасибо, Miramax!
Примерно к такому выводу я и пришел. Изменил в обработчике значение и там его вызвал, при этом оставил trace в главной функции класса. Придется привыкать к асинхронности flash и выстраивать логические цепочки соответсвенно его модели поведения.

etc 04.06.2007 04:34

Вдогонку: имена классов должны начинаться с прописной буквы, ни больше, ни меньше.

apetrusha 06.06.2007 01:53

Спасибо всем за помощь
 
Очень приятно, когда мудрые профи помогают найти правильную дорогу новичкам.

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

Не только в этой ветке но и на других.

Не все понятно с первого раза, но время и терпение расставит все по местам.

А ваша помощь - как нить ариадны в лабиринте.

Flash help достаточно объемная книжица, но иногда примеры обходят самые интересные вопросы, такие, например, как правильная загрузка последовательности внешних ресурсов итп.

P.S. Есть электронные версии
ActionScript 3.0 Cookbook - ISBN 0596526954.chm
ActionScript Cookbook - ISBN 0596004907.chm

издательства Oreilly (там много другой инфы на 1,9Гб)


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

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