Форум 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)
-   -   Функции в класах - HELP! (http://www.flasher.ru/forum/showthread.php?t=70701)

zizos@mail.ru 20.10.2005 13:19

Функции в класах - HELP!
 
Народ, помогите разобраться с классом.
Есть такая конструкция:
Код:

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);
}
}


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

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