• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01-09-2010, 14:55   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2009
Beiträge: 100
eventListener, der auf geänderte Variable reagiert

Gibt es einen eventListener, der überwacht ob eine Variable geändert wurde?

Ich habe eine Klasse, die mit einer mysql Datenbank kommuniziert. Jetzt möchte ich, dass der Parent der Klasse darauf reagiert, dass die Daten erhalten wurden. Die Daten werden in einen statischen Array geschieben. Bei einem Fehler hat der Array nur die Länge 1.
Ich habe es in Moment so realisiert, dass ein enterframe event ständig kontrolliert ob die Variable geändert wurde oder nicht.
Aber das geht doch sicher eleganter!
Irgendwie sollte es so wie eine set Methode funktionieren. aber man kann nicht vom Child auf den Parent zugreifen. Auch ein Responder funktioniert so ähnlich. Wenn ich die call Methode aufrufe, wird nach Fertigstellung des Aufrufes eine Funktion aufgerufen.

2. Ansatz: Mir fällt gerade ein, dass es auch so funktionieren kann, dass ich die Klasse ohne Konstruktor erzeuge, im Parent instanziere, dort eine Methode der Klasse aufrufe und mir dann einen Rückgabewert ausgeben lasse. Aber wie fange ich ab wann der Rückgabewert gesetzt wurde?
Auch wieder mit einem enterframe event und einer if (true) Abfrage?

bitte kann mir jemand den logische Ansatz erklären, wie man das löst.
Das müßte doch eine Standartprozedur sein.

das Script dazu:

die Parent Klasse
PHP-Code:



........
        
projektOrdner = new ProjektOrdner();
        
projektOrdner.65;
        
addChild(projektOrdner);
            
        
abfrage = new Abfrage("projekte");
        
addEventListener(Event.ENTER_FRAMEprojekteSetzen);
    }

/*
 * erstellen der Tabelle mit den Projekten
 */
        
private function projekteSetzen(event Event) : void {
            switch (
Main.PROJEKTE.length){
                case (
0):
                    break;
                case (
1):
                    
statusAnzeige.status_txt.text PROJEKTE[0];
                    
PROJEKTE.splice(0);
                    break;
                default:
                
removeEventListener(Event.ENTER_FRAMEprojekteSetzen);
                
                for (var 
int 0Main.PROJEKTE.lengthi++) {
                    var 
projekt ProjektEintrag = new ProjektEintrag();
                    var 
projektTitel ProjektButton = new ProjektButton(Main.PROJEKTE[i][1]);
                    
projekt.addChild(projektTitel);
                    
projektTitel.name Main.PROJEKTE[i][1];
                    
projektTitel.addEventListener(MouseEvent.CLICKdateiOrdnerAbfrage);
                    
                    
projektTitel.TXT.text Main.PROJEKTE[i][1];
                    
projekt.bearbeiter.text String(Main.PROJEKTE[i][2]);
                    
projekt.zuletztBearbeitet.text String(Main.PROJEKTE[i][3]).slice(0,16);
                    
projekt.info.text String(Main.PROJEKTE[i][4]).slice(0,42)+"...";
                    
projekt.erstelltAm.text String(Main.PROJEKTE[i][5]).substring(0,16);

                    
projekt.30;
                    
projekt.65+45*i;
                    
projektOrdner.addChild(projekt);
                }
            }
        } 
das Child
PHP-Code:
package {
    
import flash.net.Responder;
    
import flash.events.NetStatusEvent;
    
import flash.net.NetConnection;
    
import flash.display.Sprite;

    
/**
     * @author David
     */
    
public class Abfrage extends Sprite {
        private var 
gatewayUrl String = GLOBAL.GATEWAYURL;
        private var 
netConnection NetConnection;
        private var 
phpUrl String;
        
        public function 
Abfrage(abfrageTBL String = GLOBAL.POJEKTEURL) {
            switch(
abfrageTBL){
                case 
"projekte":
                    
phpUrl = GLOBAL.POJEKTEURL;
                    break;
                case 
"uploads":
                    
phpUrl = GLOBAL.UPLOADSURL;
                    break;
            }
            
anmelden();
        }
    
/*
     * anmelden an die Datenbank
     */
        
private function anmelden() : void {
            
            
//verbinden mit amfphp

            
netConnection = new NetConnection();
            
netConnection.addEventListener(NetStatusEvent.NET_STATUSonStatus);
            
netConnection.connect(gatewayUrl);
            
            
callLogin();            
        }
    
/*
     * senden an PHP
     */
        
private function callLogin() : void {
            var 
responder Responder = new Responder(logonResultlogonFault);
            
netConnection.call(phpUrlresponder);
        }

        private function 
onStatus(event NetStatusEvent) : void {
            
trace ("konnte nicht verbinden");
        }
    
/*
     * rueckgabe von php
     */
        
private function logonResult (data:Array):void {

            switch(
phpUrl) {
                case GLOBAL.
POJEKTEURL:
                    
Main.PROJEKTE data;
                    break;
                case GLOBAL.
UPLOADSURL:
                    
Main.DATEIEN data;
                    break;
            }
        }
    
/*
     * Fehlerausgabe
     */
        
private function logonFault (data:Object):void {
            
trace (data);
            for (var 
key String in data){
                var 
value : * = data [key];
                
trace (key " = " value);
            }
            
        }
    }

Könnte ich den Konstruktor weglassen und mir von der Methode logonResult den Rückgabewert ausgeben lassen? so wie in Ansatz 2 beschrieben? und wie erhalte ich dabei einen Event gesetzt.

Danke für Eure tatkräftige Unterstützung!
xact21 ist offline   Mit Zitat antworten
Alt 01-09-2010, 15:10   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 5.626
Wieso lädst Du Deine Daten eigentlich über eine NetConnection? Diese Klasse ist Doch eigentlich nur für Multimedia-Verbindungen mit dem Server da?!

Benutz' doch einfach einen normalen URLLoader mit einem Event.COMPLETE-Listener, der dann die Daten verarbeitet und die entsprechende Funktion aufruft!

Wenn Du es aber unbedingt so lassen möchtest, kannst Du auch in logonResult eine Event dispatchen, dass Du dann ein Deiner "Parent Klasse" verarbeitest.

Eine dritte Möglichkeit wäre aus der zu überwachenden Variable eine get/set-Property zu machen, die dann bei set ihrerseits weitere Funktionen aufruft.

P.S.: Wieso erweitert Abfrage eigentlich Sprite?
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (01-09-2010 um 15:44 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 01-09-2010, 15:25   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2009
Beiträge: 100
Thumbs up Danke für deine schnelle, konstruktive Antwort!!!

Abfrage ist ein Sprite, weil ich immer noch ein Anfänger im Programmieren bin. Ich habs jetzt in Loader geändert. Ich bin auch immer für solch kleine Tipps dankbar.

Mit get set wollte ich es erst auch versuchen, aber das Problem dabei war, das ich in Abfrage ja keine set Methode im Parent aufrufen kann. Ich dachte mir ursprünglich auch, dass das am elegantesten wäre. Kannst du mir bitte erklären wie du das angehen würdest!

und das mit den eventDispatcher habe ich noch gar nie angewandt. Das ist etwas was ich auch unglaublich gerne lernen würde. Könntest du mir das Prinzip davon mal erklären oder hat du einen guten Link dazu?

Super, hier haben sich 2 Bereiche aufgetan, die mir bisher immer noch ein leichtes Rätsel waren und die mich, wenn ich sie verstanden habe, insgesamt sicher ein großartiges Stück weiterbringen.
xact21 ist offline   Mit Zitat antworten
Alt 01-09-2010, 15:41   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 5.626
Zitat:
Zitat von xact21 Beitrag anzeigen
Abfrage ist ein Sprite, weil ich immer noch ein Anfänger im Programmieren bin. Ich habs jetzt in Loader geändert.
Und warum jetzt Loader? Deine Klasse muss - soweit ich das sehe - gar keine Anzeigeklasse erweitern (sie zeigt ja nichts an)! Eigentlich muss sie überhaupt nichts erweitern (Es sei denn Du willst ein EventDispatchen, dann solltest Du EventDispatcher erweitern).

Bei den übrigen Punkten sollte Dir ein Blick in die Flash-Hilfe weiterhelfen:
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 01-09-2010, 15:47   #5 (permalink)
Neuer User
 
Registriert seit: Oct 2009
Beiträge: 100
Ich wusste gar nicht, dass man eine Klasse auch ohne Erweiterung erstellen kann!

Ich werde sie jetzt als EventDispatcher erweitern, damit dich das gleich ausprobieren und üben kann.

DANKE für die großartige Hilfestellung!
xact21 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Variable aus Schleife in EventListener übergeben Jay84 ActionScript 3 12 29-10-2009 14:05
List-Komponente reagiert nicht auf EventListener piXeLfanatiker Komponenten und SmartClips 2 10-06-2008 00:22
variable in prototype reagiert nicht.... andretti ActionScript 1 6 12-05-2005 08:39
Hilfe Variable reagiert nicht cesaria Flash MX 3 20-07-2003 09:09
variable übergeben, aber script reagiert nicht nepo ActionScript 1 1 09-07-2003 19:02


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele