Просмотр полной версии : Учусь делать классы. XML loader.
Замотался читать факи, чужие классы. У меня ошибки – просто дебильные. Немогу.
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'ом? (по прайвату флаш ругается на недоступность метода, хотя я его, в общем то, не вызывал, на то он и конструктор)?
Ною о помощи.
Почему не работает, у меня все работает.
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 писать не нужно. даже вредно.
Гхм, конструктор вообще-то всегда public, иначе как его вызывать-то ?
Вот так должно работать:
RootXML.onLoad = function (success) {
trace("Loaded");
trace(this); }
я не в тему немножко -)
вот скажите, классы они в принципе быстрее работают?
или чем еще лучше чем функциональное программирование?
Мой товарищ, вроде как высококвалифицированный as-программер прислал мне свой класс для образца. Там Конструктор - прайват. Правда пустой. This прописано вообще ко всем членам класса.
Ко всему прочему у меня не срабатывает xml_obj.onLoad, не срабатывает трэйс и вообще классы флэша пока вызывают во мне только чёрную злобу =)
я не в тему немножко -)
вот скажите, классы они в принципе быстрее работают?
или чем еще лучше чем функциональное программирование?
www.ya.ru "ООП отличие процедурные языки"
Мой товарищ, вроде как высококвалифицированный as-программер прислал мне свой класс для образца. Там Конструктор - прайват. Правда пустой. This прописано вообще ко всем членам класса.
Ко всему прочему у меня не срабатывает xml_obj.onLoad, не срабатывает трэйс и вообще классы флэша пока вызывают во мне только чёрную злобу =)
this - ссылка на текущий обект класса, поетому this.trace() не будет работать (trace - глобальная функция, а не метод класса)
конструктор private означает. что ты обект даного класса сможеш создать только в даном классе. во Флеше также имеет смысл для обектов, что наследуються от MovieClip
вот скажите, классы они в принципе быстрее работают?
или чем еще лучше чем функциональное программирование?
Для тех. то задает такие вопросы - абсолютно ничем.
при работе с классами this писать не нужно. даже вредно.
программировать - вредно, от етого глаза портятся.
2Mokus: Офигенно. Тыб хоть прочитал написанное чтоли.. this.trace() - мой метод, внутренний.
Про прайват я и не спорю, просто удивился образцу, присланному мне (см. выше).
2Mokus: Офигенно. Тыб хоть прочитал написанное чтоли.. this.trace() - мой метод, внутренний.
Про прайват я и не спорю, просто удивился образцу, присланному мне (см. выше).
Чувак, Обалденно. Я прочитал внимательно то что ты написал, а если ты чегото не понял - скажи: "Я не понял" и я обясню. В класе XML (обект RootXML) нет функции trace, а вызвать ты пытаешся ее именно оттуда.
Про прайват я и не спорю
А че, с тобой кто-то спорит? Я тебе вообще чето обяснить хотел, помоч блин. Спорить я б нашел когото другого.
private function trace(s) {
.............................
}
а это что? не функция трэйс класса РуутХМЛ?
и вызывается она изнутри а не снаружи. если ты имел ввиду статус private
private function trace(s) {
.............................
}
а это что? не функция трэйс класса РуутХМЛ?
Браво. правильный вопрос.
ответ: "нет, ето метод класса TXMLMenu, а класса РуутХМЛ у тебя нет (не путай классы и обекты)"
а имел ввиду я только то, что имел ввиду.
Бл*, перепутал имена. как бужто чтото меняет.
Мой товарищ, вроде как высококвалифицированный 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);
}
}
}
Свою ошибку понял, спасибо большое.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.