Форум 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)
-   -   про переменные в классе (http://www.flasher.ru/forum/showthread.php?t=78470)

this.wampa 18.04.2006 04:14

про переменные в классе
 
есть класс:

Код:

class screen {
        public var gogo:Number;
        public var xmlLoader:XML;
       
        public function screen() {
               
                xmlLoader = new XML();
                xmlLoader.ignoreWhite = true;
                xmlLoader.load("screena.xml");
               
                //gogo = 150;
               
                xmlLoader.onLoad = function(success){

                        if (success) {
                                gogo = this.firstChild.childNodes.length;
                                _root.SCR.test();
                        }
                }
        }
       
        public function test() {
                trace(gogo);
        }
}

вызываю:

Код:

var SCR:screen = new screen();
а выдает undefined

почему???

breez38 18.04.2006 04:39

Цитата:

Код:

xmlLoader.onLoad = function(success){

                        if (success) {
                                gogo = this.firstChild.childNodes.length;
                                _root.SCR.test();
                        }
                }


Потому что в данном случае флешка "думает", что gogo относиться к xmlLoader'у, а не к твоему классу.
Лечение: использование делегатов
Пример:
В самом начале файлика с классом (до объявления класса):
Код:

import mx.utils.Delegate
Дальше в классе объявляешь метод
Код:

private afterLoad(success:Boolean):Void
{
  if (success)
  {
    this.gogo = this.firstChild.childNodes.length;
    this.test();
  }
}

и цепляешь делегата на onLoad
Код:

xmlLoader.onLoad = Delegate.create(this, afterLoad);
И еще - проверь правильность XML-файла

this.wampa 18.04.2006 05:28

Зашибись!
Немного подправила и фсе заработало! Спасибо!

Код:

private function afterLoad(success:Boolean):Void {
        if (success) {
                this.gogo = xmlLoader.firstChild.childNodes.length;
                this.test();
          }
}


AxelRB 18.04.2006 10:11

breez, ты человек!
А я вот таким идиотизмом раньше страдал (как ни странно все работает):
Код:

class ... {
        public function setContent(node:XMLNode) {
                if(node.attributes.src!=undefined) {
                        var Html:LoadVars = new LoadVars();
                        var Body:TextField = this["txtBody"];
                        Html.onData = function(src:String) {
                                if(src!=undefined)
                                        Body.htmlText = src.split("\r\n").join("");
                        }
                        Html.load(node.attributes.src);
                }
        }
}

:p


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

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