Ergebnis 1 bis 5 von 5

Thema: MooTools Kontextproblem mit this

  1. #1
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard MooTools Kontextproblem mit this

    Hallo,

    wie einige von euch bermerkt haben versuche ich mir MooTools beizubringen. Wenn ich ein Problem habe lande ich gerne trotzdem im Contao-Forum, da ich das Forum super finde.
    Ich hoffe ich nerve euch nicht :-)

    Nun zu meinem Problem. Ich habe eine MooTools Klasse (bzw versuche eine zu erstellen).

    In dieser Klasse mache ich nun folgendes:
    PHP-Code:
    driverObjectnull,

    // die Methode wird im Konstruktor aufgerufen (was auch klappt)
    loadDriver: function(driverdriverPath){
            var 
    path driverPath+driver+'.js';
            var 
    self this// brauche ich nachher

            
    var driverFile Asset.javascript(path , {
                
    onLoad: function(){
                    var 
    driverObject = new window[driver](this.options)
                    
    self.driverObject driverObject;
                    
    console.log(driverObject); // mein Objekt. Alles klappt :-)
                    
    console.log(self.driverObject); // hier ist ein Objekt drin, so wie ich es will
                
    // hier könnte ich this binden wenn ich nicht das mit dem self gemacht hätte (wie von davidwalsh empfohlen)
            
    });
            
    console.log(self.driverObject); // aber hier nicht mehr :-(
        
    }, 
    Hat jemand von euch eine Ahnung was da schief geht? Ich kann das nirgends aus der Klasse ansprechen.

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  2. #2
    Contao-Nutzer
    Registriert seit
    01.11.2012.
    Ort
    Kiel
    Beiträge
    109

    Standard

    Wenn ich mich recht erinnere, lädt die Mootools-Klasse Asset doch eine Datei herunter, und führt das onLoad-Event aus, wenn das Herunterladen erledigt ist.

    Du versuchst aber direkt nach dem Erstellen des Asset-Objekts, bevor der Download abgeschlossen sein kann, auf eine Variable (self.driverObject) zuzugreifen, die zu dem Zeitpunkt noch gar nicht existiert.

    Könntest du stattdessen nicht ein eigenes Event definieren, dass im Asset.onLoad abgefeuert wird und in einer anderen Funktion deiner Klasse behandelt wird?

  3. #3
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Danke für die flotte Antwort!

    Zitat Zitat von MartinG Beitrag anzeigen
    Wenn ich mich recht erinnere, lädt die Mootools-Klasse Asset doch eine Datei herunter, und führt das onLoad-Event aus, wenn das Herunterladen erledigt ist.
    Soweit hast du recht. Das funktioniert auch. Ich lade eine Datei in der sich eine Klasse befindet. Direkt nachdem das geklappt hat erzeuge ich eine Instanz (was auch klappt).

    Zitat Zitat von MartinG Beitrag anzeigen
    Du versuchst aber direkt nach dem Erstellen des Asset-Objekts, bevor der Download abgeschlossen sein kann
    onLoad wird ausgeführt sobald das funktioniert. Die Instanz wird korrekt erzeugt.

    Zitat Zitat von MartinG Beitrag anzeigen
    auf eine Variable (self.driverObject) zuzugreifen, die zu dem Zeitpunkt noch gar nicht existiert.
    Könnte es sein, dass während die Datei geladen wird direkt weitergemacht wird und die Variable zu dem Zeitpunkt wirklich nicht existiert? Wie kann ich das verhindern?

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  4. #4
    Contao-Urgestein
    Registriert seit
    07.04.2010.
    Ort
    Stuttgart
    Beiträge
    2.733
    User beschenken
    Wunschliste

    Standard

    Ich habe mal die Komplette Datei (eine von beiden, aber das problem liegt sicher darin) als Gist gespeichert.
    https://gist.github.com/4171774

    Erkennt jemand was (sonstige Kritik ist auch immer erwünscht)

    //Edit: Okay wenn ich die Datei einfach so im HTML lade klappt alles... wie schaffe ich es die dynamisch zu laden?!
    Geändert von psren (29.11.2012 um 21:24 Uhr)

    Wenn ich euch helfen konnte könnt ihr euch gerne mal
    meine Amazon Wunschliste anschauen. Dankeschön.

  5. #5
    Contao-Nutzer
    Registriert seit
    01.11.2012.
    Ort
    Kiel
    Beiträge
    109

    Standard

    Zitat Zitat von psren Beitrag anzeigen
    Könnte es sein, dass während die Datei geladen wird direkt weitergemacht wird und die Variable zu dem Zeitpunkt wirklich nicht existiert? Wie kann ich das verhindern?
    Richtig, das meinte ich. Während dein Objekt var driverFile = Asset.javascript(...) noch am Herunterladen ist, wird schon console.log(self.driverObject); ausgeführt - und dieses .driverObject gibt es noch nicht, da es erst im driverFile.onLoad zugewiesen wird.

    Verhindern kannst du das, indem du den Code, der nach dem Laden der JavaScript-Datei ausgeführt werden soll, eben in die Funktion für das onLoad-Event schreibst. Da sich das this innerhalb dieser Funktion dann auf das Script-Objekt, und nicht auf deine Klassen-Instanz bezieht, müsstest du mit einem onLoad: function(){...}.bind(this) arbeiten, um auf die Methoden deiner Klasse zugreifen zu können. Aber das hattest du in den Kommentaren im ersten Post ja schon geschrieben.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •