Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-02-2007, 09:23   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 21
allgemeine Fragen zur Nutzung von LoadVars innerhalb "eigener" Klasse

Hallo zusammen,

ich hätte ein paar kurze banale Fragen an euch.

Warum geht das:

Code:
...
loadvar = new LoadVars();
loadvar.onLoad = load;
loadvar.load('...');
}
    
public function load (success :Boolean) :Void {
...

aber das nicht:

Code:
...
loadvar = new LoadVars();
loadvar.onLoad = function () { load(); };
loadvar.load('...');
}
    
public function load (success :Boolean) :Void {
...
und wieso kann ich load keine Methode aufrufen:

Code:
...
loadvar = new LoadVars();
loadvar.onLoad = load;
loadvar.load('...');
}
    
public function load (success :Boolean) :Void {
finish();
....

und wie kann ich folgendes Problem lösen:

In der Methode load werden Daten aus PHP in einen Array gepackt.
Diesen Array möchte ich in mySources zurückgeben.


Code:
public var data_container :Array;
...

public function mySources () :Array {
...
loadvar = new LoadVars();
loadvar.onLoad = load;
loadvar.load('...');
...
return data_container;
}
    
public function load (success :Boolean) :Void {
...
data.container.push(...);
}
Ich würde mich sehr freuen wenn ihr mir helfen könntet.

Ich bin eigentlich Designer und kein Programmierer. Deshalb
entschuldigt die banalen Fragen.
norn ist offline   Mit Zitat antworten
Alt 03-02-2007, 10:07   #2 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
Ui, ich vermute du möchtest die ganze Geschichte in eine Klasse auslagern, richtig? Am besten Du hältst dir erstmal vor augen das Actionscript asynchron abgearbeitet wird, was soviel bedeutet wie das Du auf den Inhalt deines LoadVars-Objektes erst zugreifen kannst, wenn es vollständig geladen ist. Ein ganz simples Beispiel könnte wie folg aussehen.

file: Test.as
PHP-Code:
import mx.utils.Delegate

class Test
{
    
    private var 
data   : Array
    private var 
status String
    
private var source LoadVars
    
    
/**
     * Constructor
     */
    
function Test ()
    {
        
data = new Array ()
        
status null
        source 
= new LoadVars ()
        
source.onLoad Delegate.create thisonLoad )
    }
    
    
/**
     * oeffentlich Methoden, getter und setter
     */
    
public function get result () : Array
    {
        if ( 
status == 'complete' )
        {
            return 
data
        
}
        else
        {
            return 
null
        
}
    }
    
    public function 
load url String ) : Void
    
{
        
source.load url )
    }
    
    
/**
     * private Methoden
     */
    
private function onLoad success Boolean ) : Void
    
{
        if ( 
success )
        {
            
trace 'Daten sind angekommen' )
            
parseSource()
        }
        else
        {
            
trace 'Error: 404 - file not found' )
        }
    }
    
    private function 
parseSource () : Void
    
{
        
trace 'Parsen lauft' )
        
/**
         *
         * inhalt parsen
         *
         */
        
status 'complete'
        
trace 'Parsen beendet, ab jetzt liefert get result einen wert' )
    }
    

Instanzierung der Klasse sieht so aus
PHP-Code:
var foo Test = new Test ()
foo.load 'file.txt' )
// etwas zeit verstreicht ...
trace foo.result 

Fragen zu Delegate beantwortet die Suchfunktion. Des weitern ist die Klasse, so wie sie jetzt ist nur bedingt zu gebrauchen, da du von außen ohne eine permanente Abfrage von result nie bescheid weist wann Du auf die Daten zugreifen kannst. Abhilfe schaft ein Eventlistener/dispatcher.
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (03-02-2007 um 10:13 Uhr)
shorty ist offline   Mit Zitat antworten
Alt 03-02-2007, 11:35   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 21
Hallo Shorty,

vielen Dank für deine Hilfe.

Das klappt soweit wirklich gut. Ich habe mir die
Sache mit EventDispatcher auch angelesen, aber
so ganz habe ich nicht verstanden, wie ich ihn
hier anwenden kann.

Könntest du mir vielleicht an Hand deines Beispiels
mal zeigen, wie ich mit Hilfe des EventDispatchers
prüfen kann wann die data verfügbar ist.

Das wäre super.
norn ist offline   Mit Zitat antworten
Alt 03-02-2007, 20:42   #4 (permalink)
Pixeldipaxeldipux
 
Benutzerbild von Ahrsib
 
Registriert seit: Dec 2002
Ort: Ruhrmetropole Essen
Beiträge: 7.589
Aussagekräftige Betreffs, bitte!
Auch banale Fragen lassen sich spezifizieren.
In deinem Fall tust du es ja auch.

Ahrsib
... some kind of facility-manager.
__________________
Selbstgelerntes ist am Besten!

iMac G5/2,1GHz, 2,5GB RAM, 20" Widescreen (1680*1050), MacOS 10.4.11, Safari 4.1, dsl 6000
Achim ...Orient

Das Flashforum zu unterstützen ist ganz einfach!
Ahrsib ist gerade online   Mit Zitat antworten
Alt 04-02-2007, 00:41   #5 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
@Ahrsib - thanksAndDone( )


file: Test.as incl Eventdispatcher
PHP-Code:
import mx.utils.Delegate
import mx
.events.EventDispatcher

class Test
{
    
    private var 
data   : Array
    private var 
status String
    
private var source LoadVars
     
     
private var dispatchEvent     : Function
     public var 
addEventListener   : Function
     public var 
removeEventListener: Function
    
    
/**
     * Constructor
     */
    
function Test ()
    {
        
data = new Array ()
        
status null
        source 
= new LoadVars ()
        
source.onLoad Delegate.create thisonLoad )
          
EventDispatcher.initializethis )
    }
    
    
/**
     * oeffentlich Methoden, getter und setter
     */
    
public function get result () : Array
    {
        if ( 
status == 'complete' )
            return 
data
        
else
            return 
null
    
}
    
    public function 
load url String ) : Void
    
{
        
source.load url )
    }
    
    
/**
     * private Methoden
     */
    
private function onLoad success Boolean ) : Void
    
{
        if ( 
success )
        {
            
trace 'Daten sind angekommen (' unescape(source.toString()) + ')' )
            
parse()
        }
        else
        {
            
trace 'Error: 404 - file not found' )
        }
    }
    
    private function 
parse () : Void
    
{
        
trace 'Parsen lauft' )
        
// ->
          
for ( var i:String in source )
          {
              if ( 
!= 'onLoad' )
                      
data.pushsource] )
          }
          
// <-
        
status 'complete'
        
trace 'Parsen beendet, ab jetzt liefert result einen wert, und der event onResut wird getriggert ...' )
          
dispatchEvent( {type:'onResult'target:this} )
    }
    

timeline
PHP-Code:
var handle Object = new Object ()
handle.onResult = function ( Object )
{
    
trace '[RESULT]\t' e.target.result )
    
// oder trace ( foo.result )
}

var 
foo Test = new Test ()
foo.addEventListener'onResult'handle )
foo.load 'file.txt' 
Angehängte Dateien
Dateityp: zip Test-incl-EventDispatcher.zip (7,3 KB, 9x aufgerufen)
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (04-02-2007 um 02:03 Uhr)
shorty ist offline   Mit Zitat antworten
Alt 04-02-2007, 01:27   #6 (permalink)
notzucht
 
Benutzerbild von shorty
 
Registriert seit: Nov 2003
Ort: Potsdam
Beiträge: 2.939
Eine weitere Möglichkeit besteht darin, die LoadVars Klasse zu erweitern.

file: Test.as extends LoadVars
PHP-Code:
import mx.events.EventDispatcher;

class 
Test extends LoadVars
{
    private var 
data:Array;
    
    private var 
dispatchEvent:Function;
    public var 
addEventListener:Function;
    public var 
removeEventListener:Function;

    function 
Test ()
    {
        
super ()
        
data = new Array ();
        
EventDispatcher.initialize this );
    }

    public function 
get result () : Array
    {
        return 
data
    
}

    private function 
onData raw String ) : Void
    
{
        if ( 
raw parse raw )
        
//if ( raw ) parseAssoc ( raw )
    
}
    
    
/**
     * parse index based array
     */
    
private function parse str String ) : Void
    
{
        var 
a:Array = str.split('&')
        for ( var 
i:String in a ) if ( a[i] ) data.push a[i].split('=')[1] )
        
dispatchEvent ({type:'onResult'target:this});
    }
    
    
/**
     * parse associative array
     */
    
private function parseAssoc str String ) : Void
    
{
        var 
a:Array = str.split('&')
        for ( var 
i:String in a ) if ( a[i] ) dataa[i].split('=')[0] ] = a[i].split('=')[1]
        
dispatchEvent ({type:'onResult'target:this});
    }

timeline
PHP-Code:
var handle Object = new Object ()
handle.onResult = function ( Object )
{
    
trace '[RESULT]' e.target.result )
    
// oder, um an die werte des assoziativen arrays zu gelangen:
    // -> trace ( '[RESULT]' + e.target.result.<var name> )
}

var 
foo Test = new Test ()
foo.addEventListener'onResult'handle )
foo.load 'file.txt' 
viele Wege führen nach Rom, such Dir einfach den für dich passendsten raus


lg,
shorty
Angehängte Dateien
Dateityp: zip Test-extends-LoadVars.zip (6,8 KB, 8x aufgerufen)
__________________
.
Flex in a week | Viertel vor halb nach Vollmond | ^^°.°^^ | Waltz with Bashir
.

Geändert von shorty (04-02-2007 um 02:04 Uhr)
shorty ist offline   Mit Zitat antworten
Alt 06-02-2007, 09:28   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 21
Smile

Vielen Dank für deine Hilfe! Das klappt tip top.
norn ist offline   Mit Zitat antworten
Alt 08-02-2007, 11:29   #8 (permalink)
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 21
Ich habe doch nochmal 2 kurze Fragen:

Code:
class X {
   public var y;

public function X() {
   y = new Y();
} 

}
Code:
class Y {
   public var z;

public function X() {
   z = new Z();
} 

}
Code:
class Z {
....

dispatchEvent({type:onClose, target:this});

......
1.

Kann ich die Benachrichtung vom Event in Klasse Z irgendwie in Klasse X zur Verfügung bekommen?

2.

Kann ich in Klasse X eine Varibale definieren, die ich überall zur Verfügung habe, ohne sie ständig übergeben zu müssen?

Danke nochmal für eure Hilfe!
norn 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 12:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele