Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-11-2005, 19:26   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 118
Komische Fehlermeldung

Hallo,

ich habe eine Klasse, die Daten aus einer XML mittels der Delegate-Klasse laden soll.
Das Beispiel ist aus dem Flash-Online-Tutorial.

Ich bekomme immer folgende Fehlermeldung:
HTML-Code:
**Fehler** D:\Flash\SomeClassThatUsesLoadedXML.as: Zeile 15: Keine Methode mit dem Namen 'Delegate' vorhanden.
     		xmlData.onLoad=Delegate.create(this,processXML);

Anzahl der ActionScript-Fehler: 1 	 Gemeldete Fehler: 1
Das ist die Klasse:
PHP-Code:
import mx.utils.Delegate;

class 
SomeClassThatUsesLoadedXML// with Delegate class

    
private var inited:Boolean=false;
    private var 
xmlData:XML;
    
    function 
SomeClassThatUsesLoadedXML(){
        if(!
inited) {
            
init();
        }
    }
    private function 
init() {
        
xmlData=new XML();
        
xmlData.onLoad=Delegate.create(this,processXML);
        
inited=true;
    }
    private function 
processXML():Void {
        
trace("Load event fired on: "+this "\nXML data: "xmlData);
    }
    public function 
loadXML(urlPath:String):Void {
        
xmlData.load(urlPath);
    }
    public function 
toString() {
        return 
"[SomeClassThatUsesLoadedXML]";
    }

Das steht im FLA-File:
PHP-Code:
import SomeClassThatUsesLoadedXML;
var 
experimental:SomeClassThatUsesLoadedXML=new SomeClassThatUsesLoadedXML();
experimental.loadXML("daten.xml"); 
Und ja, die beiden Dateien liegen im gleichen Verzeichnis

Ich hab's mal hochgeladen. Wäre super, wenn sich jemand das mal anschauen könnte!
Angehängte Dateien
Dateityp: rar XML.rar (4,8 KB, 3x aufgerufen)
thkolz ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:31   #2 (permalink)
using namespace
 
Benutzerbild von artjom
 
Registriert seit: May 2002
Ort: Hamburg underground
Beiträge: 657
mach mal die import anweisung weg und schreib:
PHP-Code:
xmlData.onLoad=mx.utils.Delegate.create(this,processXML); 
gruß
__________________
artjom.com -|- Melom
Einen PC beschleunigen? Klar, mit 9,81 m/s^2!
artjom ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:32   #3 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
kolz, mal was anderes, wofür bitte dieser aufwand?
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.
shorty ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:34   #4 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 118
Dann kommt folgende Meldung:
HTML-Code:
**Fehler** D:\Flash\SomeClassThatUsesLoadedXML.as: Zeile 13: Keine Methode mit dem Namen 'mx' vorhanden.
     		xmlData.onLoad=mx.utils.Delegate.create(this,processXML);  

Anzahl der ActionScript-Fehler: 1 	 Gemeldete Fehler: 1
thkolz ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:37   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 118
Zitat:
Zitat von shorty
kolz, mal was anderes, wofür bitte dieser aufwand?
Ich muss eine XML-Datei in einer Funktion überprüfen, und ohne Delegate ist das wohl nicht möglich, da ich sonst "undefined" zurückgeliefert bekomme.

Das liegt wohl daran, dass die XML-Datei erst vollständig geladen werden muss...
thkolz ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:40   #6 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
doch doch, das geht, du must nur vorher ne referenz auf die klasse setzen
PHP-Code:
class foo {
    public function 
bla() {
        
trace('hello world!');
    }
    public function 
init():Void {
        var 
_c:foo this;
        var 
x:XML = new XML();
        
x.ignoreWhite true;
        
x.onLoad = function(ok) {
            if (
ok) {
                
// mit ref läuft ...
                
_c.bla();
                
// ohne ref läuft nicht ...
                
bla();
            }
        };
        
x.load('file.xml');
    }

__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.
shorty ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:49   #7 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 118
Wo soll ich was referenzieren?

In der Klasse?

So, wie deine Funktion aufgebaut ist, mache ich das bei mir in der FLA auch, aber das bringt mich leider nicht weiter.

Ich würde es ja auch lieber einfach machen, aber das geht leider nicht.
thkolz ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:50   #8 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
wat möchtest du denn haben, soll die xml schon bei der instanzierung geladen werden, oder solls flexibel sein?
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.
shorty ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:54   #9 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 118
Ja, die XML soll direkt am Anfang geladen werden, so dass ich in der FLA immer darauf zugreifen kann...
thkolz ist offline   Mit Zitat antworten
Alt 30-11-2005, 19:59   #10 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
ok, und wenn ich es richtig verstanden habe, soll das nur genau einmal geschehen. sprich, die einmal geladene xml bzw. das xmlData object darf nicht wieder überschrieben, soll aber überprüft werden?!?
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.
shorty ist offline   Mit Zitat antworten
Alt 30-11-2005, 20:08   #11 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 118
Genau.

Am anfang werden die Werte in zwei ComboBoxen geladen (Produkt und Modell).

Innerhalb einer Button.onClick-Funktion werden dann die Elemente der in den Comboboxen ausgwählten Werte, die in eine Liste eingefügt wurden, in einer ScrollPane dargestellt.

Dabei muss überprüft werden, ob ein Produkt einer bestimmten Marke vorliegt. Wenn ja, dann wird die Ausgabe etwas geändert.

Mit der Funktion, die das überprüft, habe ich so meine Probleme.

Deswegen wäre es super, wenn ich am Anfang die XML-Datei einlesen könnte, und dann immer darauf zugreifen kann.
thkolz ist offline   Mit Zitat antworten
Alt 30-11-2005, 20:17   #12 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
ahhh, ok.

demnach "brauchst" du eine funktion / methode, welche zu aller erst die betreffende xml lädt, und eine, welche auf zuruf per parameter die xml durch-forstet, und guckt, ob zum parameter (marke) ein eintrag (produkt) vorhanden ist?!?


wenn ja, dann stopf doch pls. mal deine xml struktur in den anhang (bitte nur n auszug, so das man sieht, wie sie aufgebaut ist)
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.
shorty ist offline   Mit Zitat antworten
Alt 30-11-2005, 20:40   #13 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Könnte es sein, dass du an den Klassenpfaden von Flash rumgespielt hast?
(Bearbeiten -> Voreinstellungen -> ActionScript -> AS 2.0 Einstellungen)
Da sollte auf jeden Fall ein Eintrag „$(LocalData)/Classes“ drinn sein.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 30-11-2005, 20:51   #14 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 118
Zitat:
Zitat von Janoscharlipp
Könnte es sein, dass du an den Klassenpfaden von Flash rumgespielt hast?
(Bearbeiten -> Voreinstellungen -> ActionScript -> AS 2.0 Einstellungen)
Da sollte auf jeden Fall ein Eintrag „$(LocalData)/Classes“ drinn sein.
Da hab ich nichts dran gemacht. Das stimmt alles...

@shorty:
So sieht meine XML-Datei aus:
PHP-Code:
<?xml version="1.0" encoding="UTF-8"?>
<Import>
    <Row>
        <Producer>H6</Producer>
        <Model>T17</Model>
        <Field3> </Field3>
        <Field4>2 Aout 2005</Field4>
        <Field5>12150</Field5>
        <Field6>69 / 94</Field6>
        <Field7>(540)</Field7>
        <Field8>3510</Field8>
        <Field9>2780</Field9>
        ....
    </Row>
    </Import>
Es sind eigentlich 51 Elemente...
thkolz ist offline   Mit Zitat antworten
Alt 30-11-2005, 21:15   #15 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
Ik habe in der zeit mal n kleines bsp gebastelt, schau dir dit mal an.
XML - Productkatalog
HTML-Code:
<?xml version='1.0' encoding='utf-8'?>
<products>
    <label id="levis">
	<item name="501" size="30/30"></item>
	<item name="501" size="32/30"></item>
	<item name="501" size="34/30"></item>
	<item name="401" size="32/32"></item>
	<item name="401" size="32/34"></item>
	<item name="401" size="34/30"></item>
    </label>
    <label id="diesel">
	<item name="seatle" size="29/30"></item>
	<item name="garbage" size="36/34"></item>
	<item name="shorty" size="128"></item>
    </label>
</products>
Klasse - Catalog
PHP-Code:
class Catalog {
    
    private var 
products:XML;
    private var 
loaded:Boolean;
    
    function 
Catalog() {
        
loaded false;
        
load('products.xml');
    }
    
    private function 
load(source:String):Void {
        var 
_c:Catalog this;
        
products = new XML();
        
products.ignoreWhite true;
        
products.onLoad = function(ok) {
            if (
ok) {
                
_c.loaded true;
            }
        };
        
products.load(source);
    }
    
    public function 
search(label:Stringitem:String):Void {
        if (
loaded == true) {
            var 
check:Boolean false;
            var 
n:Array = products[label].childNodes;
            if (
n) {
                for (var 
0n.lengthi++) {
                    if (
n[i].attributes.name == item) {
                        
check true;
                        break;
                    }
                }
                if (
check == true) {
                    
trace('Label: "' label '" & item: "' item '" found!');
                    
// deine aktionen ...
                
} else {
                    
// deine aktionen ...
                    
trace('Label: "' label '" found! But not hit for item: "' item '"');
                }
            } else {
                
// deine aktionen ...
                
trace('Sorry, label not in catalog!');
            }
        } else {
            
// deine aktionen ...
            
wait(labelitem);
        }
    }
    
    private function 
wait(label:Stringitem:String):Void {
        var 
_c:Catalog this;
        
trace('Please wait a second. Loading catalog ...');
        var 
ivWait setInterval(function () {
            if (
_c.loaded == true) {
                
clearInterval(ivWait);
                
_c.search(labelitem);
            } else {
                
trace('Please wait a second. Loading catalog ...');
            }
        }, 
1000);
    }
    

Timeline
PHP-Code:
var Products:Catalog = new Catalog();
//              label   |  item
Products.search('diesel''shorty'); 
An den Stellen, wo ich ein Trace geschrieben habe, könnte man eine simplen return true oder false, oder was dir sonst so einfällt setzen, um die suchanfrage auszuwerten.

Die methoden und der constructor sind aufgrund fehlender infos nur hin geklatscht. möglich wäre z.B. auch eine suche, in speziellen katalogen (unterschiedlichen *.xml files), welche als parameter übergeben, und bei erfolgreichem ladevorgang durchsucht werden ...


shorty

{edit} der schlüssel zum erfolg ist in jedem fall eine gut strukturierte xml datei ...
Angehängte Dateien
Dateityp: zip Catalog.zip (6,3 KB, 3x aufgerufen)
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (30-11-2005 um 21:43 Uhr)
shorty ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele