PDA

Просмотр полной версии : про переменные в классе


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