PDA

Просмотр полной версии : Функции в класах - HELP!


zizos@mail.ru
20.10.2005, 13:19
Народ, помогите разобраться с классом.
Есть такая конструкция:
class fMenu extends MovieClip {
..
public function fMenu() {
var XMLcontent = new XML();
XMLcontent.ignoreWhite = true;
XMLcontent.onLoad = function () {
trace(XMLcontent.firstChild.firstChild.childNodes[1].attributes.name) //выводит то что нужно
go(XMLcontent);
function go(xx:XML) {
trace(xx); //выводит содержимое xml-файла
}
}
XMLcontent.load(fXML);
}
..
}
Все работает, но необходимо вынести функцию go(xx:XML) за пределы function fMenu(). И соответственно пишешь вот так:
class fMenu extends MovieClip {

..
public function fMenu() {
var XMLcontent = new XML();
XMLcontent.ignoreWhite = true;
XMLcontent.onLoad = function () {
trace(XMLcontent.firstChild.firstChild.childNodes[1].attributes.name)//выводит то что нужно
go(XMLcontent);
}
XMLcontent.load(fXML);
}
private function go(xx:XML) {
trace(xx); // ничего не выводит!
trace(XMLcontent); // на это ругается: There is no property with the name 'XMLcontent'.
}
..
}
Но ничего в переменную xx не передается.
Разум подсказывает, что нужно что-то где-то объявить... но только где и как?

Mokus
20.10.2005, 14:26
Вообщето не в пересенную не передаеться, а функция go у тебя не вызываеться, потому что ты пробуеш обратится к ней из контекста обекта XMLcontent.
попробуй XMLcontent.onLoad = Delegate.create(this, function {...});

Ja-Ja
20.10.2005, 14:29
Конечно будет ругаться!!!
private var XMLcontent:XML=null;
теперь должно работать..:)

zizos@mail.ru
20.10.2005, 14:42
private var XMLcontent:XML=null;
Ровным счетом ничего не меняет, пробовал уже...

XMLcontent.onLoad = Delegate.create(this, function {...});
Такая конструкицяе прокатывает - ругается что нет имени функции. Ставишь имя ругается что определении функции здесь недопустимо...

Мля, во засада:((

zizos@mail.ru
20.10.2005, 14:46
А функция go() действительно не вызывается...

7thsky™
20.10.2005, 14:46
итог:


import mx.utils.Delegate;

class fMenu extends MovieClip {
public var fXML:String = '';

public function fMenu () {
var xmlContent:XML = new XML ();
xmlContent.onData = Delegate.create (this, xmlContentLoaded);
xmlContent.load (fXML);
}

public function xmlContentLoaded (content:String):Void {
if (content != undefined) {
var xml:XML = new XML ();
xml.ignoreWhite = true;
xml.parseXML (content);

if (xml.status == 0) {
go (xml);
} // end if
} // end if
}

public function go (xx:XML):Void {
trace (xx);
}
}

zizos@mail.ru
20.10.2005, 15:03
Поставил этот код.
Получил ошибку: Line 8: There is no method with the name 'Delegate'. xmlContent.onData = Delegate.create (this, xmlContentLoaded);

Mokus
20.10.2005, 15:18
import mx.utils.*;

zizos@mail.ru
20.10.2005, 15:26
Не помогает:(
Ту же самую ошибку выдает...

Mokus
20.10.2005, 16:49
Скачай апдейт к флешу. Или используй етот код


class fMenu extends MovieClip {
public var fXML:String = '';

public function fMenu () {
var xmlContent:XML = new XML ();
xmlContent.go = this.go;
xmlContent.onData = xmlContentLoaded;

xmlContent.load (fXML);
}

public function xmlContentLoaded (content:String):Void {
if (content != undefined) {
var xml:XML = new XML ();
xml.ignoreWhite = true;
xml.parseXML (content);

if (xml.status == 0) {
go (xml);
} // end if
} // end if
}

public function go (xx:XML):Void {
trace (xx);
}
}

zizos@mail.ru
20.10.2005, 21:44
Спасибо всем, заработало!
Вылечилось установкой MX 2004 Pro v. 7.2