PDA

Просмотр полной версии : Учусь делать классы. XML loader.


MyXus
27.10.2005, 23:32
Замотался читать факи, чужие классы. У меня ошибки – просто дебильные. Немогу.

class TXMLMenu extends MovieClip
{
public var RootXML:XML;

public function TXMLMenu() {
this.RootXML = new XML();
this.RootXML.ignoreWhite = true;
this.RootXML.load('menu.xml');
this.RootXML.onLoad = function () { this.trace(2222); }
}

private function trace(s) {
.............................
}

}

Мало того что trace() не работает, *** с ним, я написал свой. Но какого дьявола эта байда не работает "this.RootXML.onLoad" ?? По какой такой причине я вынужден делать конструктор public'ом? (по прайвату флаш ругается на недоступность метода, хотя я его, в общем то, не вызывал, на то он и конструктор)?

Ною о помощи.

vadfe
28.10.2005, 10:38
Почему не работает, у меня все работает.

class TXMLMenu extends MovieClip
{
private var RootXML:XML;

public function TXMLMenu() {
this.RootXML = new XML();
this.RootXML.ignoreWhite = true;
this.RootXML.load('menu.xml');
this.RootXML.onLoad = function () {
trace("Loaded");
trace(this); }
}

}


только трейс ты как-то непонятно вызываешь

KidsKilla
28.10.2005, 14:21
при работе с классами this писать не нужно. даже вредно.

Skubent
28.10.2005, 14:52
Гхм, конструктор вообще-то всегда public, иначе как его вызывать-то ?
Вот так должно работать:

RootXML.onLoad = function (success) {
trace("Loaded");
trace(this); }

andr64
28.10.2005, 16:33
я не в тему немножко -)

вот скажите, классы они в принципе быстрее работают?
или чем еще лучше чем функциональное программирование?

MyXus
28.10.2005, 18:26
Мой товарищ, вроде как высококвалифицированный as-программер прислал мне свой класс для образца. Там Конструктор - прайват. Правда пустой. This прописано вообще ко всем членам класса.
Ко всему прочему у меня не срабатывает xml_obj.onLoad, не срабатывает трэйс и вообще классы флэша пока вызывают во мне только чёрную злобу =)

MyXus
28.10.2005, 18:30
я не в тему немножко -)

вот скажите, классы они в принципе быстрее работают?
или чем еще лучше чем функциональное программирование?

www.ya.ru "ООП отличие процедурные языки"

Mokus
28.10.2005, 19:10
Мой товарищ, вроде как высококвалифицированный as-программер прислал мне свой класс для образца. Там Конструктор - прайват. Правда пустой. This прописано вообще ко всем членам класса.
Ко всему прочему у меня не срабатывает xml_obj.onLoad, не срабатывает трэйс и вообще классы флэша пока вызывают во мне только чёрную злобу =)
this - ссылка на текущий обект класса, поетому this.trace() не будет работать (trace - глобальная функция, а не метод класса)

конструктор private означает. что ты обект даного класса сможеш создать только в даном классе. во Флеше также имеет смысл для обектов, что наследуються от MovieClip

вот скажите, классы они в принципе быстрее работают?
или чем еще лучше чем функциональное программирование?

Для тех. то задает такие вопросы - абсолютно ничем.

при работе с классами this писать не нужно. даже вредно.

программировать - вредно, от етого глаза портятся.

MyXus
28.10.2005, 19:38
2Mokus: Офигенно. Тыб хоть прочитал написанное чтоли.. this.trace() - мой метод, внутренний.
Про прайват я и не спорю, просто удивился образцу, присланному мне (см. выше).

Mokus
28.10.2005, 20:00
2Mokus: Офигенно. Тыб хоть прочитал написанное чтоли.. this.trace() - мой метод, внутренний.
Про прайват я и не спорю, просто удивился образцу, присланному мне (см. выше).
Чувак, Обалденно. Я прочитал внимательно то что ты написал, а если ты чегото не понял - скажи: "Я не понял" и я обясню. В класе XML (обект RootXML) нет функции trace, а вызвать ты пытаешся ее именно оттуда.
Про прайват я и не спорю
А че, с тобой кто-то спорит? Я тебе вообще чето обяснить хотел, помоч блин. Спорить я б нашел когото другого.

MyXus
28.10.2005, 20:04
private function trace(s) {
.............................
}

а это что? не функция трэйс класса РуутХМЛ?

MyXus
28.10.2005, 20:05
и вызывается она изнутри а не снаружи. если ты имел ввиду статус private

Mokus
28.10.2005, 20:08
private function trace(s) {
.............................
}

а это что? не функция трэйс класса РуутХМЛ?
Браво. правильный вопрос.

ответ: "нет, ето метод класса TXMLMenu, а класса РуутХМЛ у тебя нет (не путай классы и обекты)"

а имел ввиду я только то, что имел ввиду.

MyXus
29.10.2005, 06:36
Бл*, перепутал имена. как бужто чтото меняет.

7thsky™
29.10.2005, 12:35
Мой товарищ, вроде как высококвалифицированный as-программер прислал мне свой класс для образца. Там Конструктор - прайват. Правда пустой. This прописано вообще ко всем членам класса.
Ко всему прочему у меня не срабатывает xml_obj.onLoad, не срабатывает трэйс и вообще классы флэша пока вызывают во мне только чёрную злобу =)

Интересно чтобы в тебе вызывали классы Java?

твоя строчка?

this.RootXML.onLoad = function () { this.trace(2222); }

ты написал this.trace (...), ответь: на что указывает в данном контексте this? после того как ты правильно ответишь, сам решишь свою проблему

по теме: (о пользе всяких там факов)

тута (http://realtime.ru/forum/viewtopic.php?t=3906), есть подробное объяснение твоей проблемы, к стати ссылка на эту тема есть отсюда: http://www.flasher.ru/forum/showthread.php?t=65536

Аntares писал однажды:


Я загружаю данные в объект XML в конструкторе, при этом не могу обратиться к экземпляру из функции onLoad, что делать?

Либо использовать "ссылку на самого себя", либо -- класс mx.utils.Delegate:




import mx.utils.Delegate;

class MyXML{
private var __data:XML = null;
private var __status:String = "";

public function MyXML(path:String){
if(path){
__data = new XML();
__data.ignoreWhite = true;

__date.onLoad = Delegate.create(this, dataLoadHandler);

__data.load(path);
}
}

private function dataLoadHandler(success):Void {
success ? __status = "XML loaded successfully" : __status = "XML load failed";
}
}



либо




class MyXML{
private var __data:XML = null;
private var __status:String = "";

public function MyXML(path:String){
var SelfRef = this;

if(path){
__data = new XML();
__data.ignoreWhite = true;

__date.onLoad = function(success){
if(success){
SelfRef.__status = "XML loaded successfully";
}
}

__data.load(path);
}
}
}

MyXus
29.10.2005, 22:23
Свою ошибку понял, спасибо большое.