PDA

Просмотр полной версии : Как правильно вызывать переменные из функций класса


in4core
09.08.2009, 23:44
Добрый вечер! Объясните мне пожалуйста кто знает : каким образом , верно, оформляется простейший класс , направленный на загрузку XML. Я пишу так :

class com.createTopMenu extends XML {

var xml:XML;
var _xmlarr:Array;
var _mc:MovieClip;

public function createTopMenu(_loc1) {
//var _o = this;
xml = new XML();
xml.ignoreWhite = true;
xml.onLoad = getTree(_loc1);
}
private function setXML(XMLlist) {
xml.load(XMLlist);
}
private function getTree(_loc2) {
_xmlarr = [];
_xmlarr = xml.firstChild.childNodes;
trace(_xmlarr);
}
}
Соответсвенно, в 3 функции у нас при трейсе выдается Undefined, потому что видимо наш xml и его начинка видна только в 1 функции. И так вопрос такой - как же правильно вызвать эту переменную, чтобы она сохранилась и в 3 функции?
_global.xml как вариант прокатит конечно. Но может есть более гуманные методы?

udaaff
10.08.2009, 00:07
Название класса пишеться с большой буквы и как правило является именем существительным.
getTree вызывается в области видимости xml, поэтому и не видно. Нужно использовать Delegate.
Если с параметрами нужно обработчик вызвать -- есть делегат с параметрами.
import mx.utils.Delegate;

class com.TopMenu
{

private var xml:XML;
private var _xmlarr:Array;
private var _mc:MovieClip;

public function TopMenu()
{
xml = new XML();
xml.ignoreWhite = true;
xml.onLoad = Delegate.create(this, xml_onLoadHandler);
}

public function setXML(path:String):Void
{
xml.load(path);
}

private function xml_onLoadHandler():Void
{
//_xmlarr = [];
_xmlarr = xml.firstChild.childNodes;
trace(_xmlarr);
}
}

in4core
10.08.2009, 00:16
Спасибо большое буду знать !!!

Добавлено через 7 минут
А где почитать про делегат с параметрами ? Он тоже пригодится позже