• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mootools, delay -> selbe funktion aufrufen

Bisi

Neues Mitglied
Hi Ihr,
bevor ich weiter groß drum herum rede, hier mein Problem:

Ich habe eine Klasse mit Mootools geschrieben.
In dieser habe ich eine Funktion, die sich 2x selbst aufruft.
Das heißt: wenn ich die Funktion innerhalb der Klasse mit this.effectDivs(0); aufrufe, sollte sie 3x durchlaufen und mir am Ende dritter durchlauf bestanden :-) ausgeben.
Code:
            effectDivs: function(mode) {
                alert(mode);
                if(mode == 0) {
                    this.effectDivs.delay(750, mode, 1);
                }
                if(mode == 1) {
                    this.effectDivs.delay(750, mode, 2);
                }
                if(mode == 2) {
                    alert ( 'dritter durchlauf bestanden :-)' );
                }
            },
so rufe ich die oben angegebene Funktion auf:
Code:
initialize: function () {
    this.effectDivs(0);
}
durchlauf eins:
alert gibt mit den wert 0 aus.

durchlauf zwei:
alert gibt mir den wert 1 aus.

dazu gibt es die Fehlermeldung im zweiten Durchlauf von FIREBUG:
this.effectDivs is undefined
this.effectDivs.delay(750, mode, 2);

Was läuft da falsch?
 
Zuletzt bearbeitet:
Werbung:
Ich würde spontan sagen, this ist nicht mehr gesetzt, also die Objektinstanz. Teste das mal per alert oder so und gibt die Instanz im Zweifel auch als Parameter mit oder nutze ein Closure oder sowas in der Art.
 
ich danke vielmals :-) ... es hat zwar eine halbe stunde gedauert, aber ich habe es dann doch noch hinbekommen ... mein englisch ist nicht das beste, aber anhand von brute-force-ausprobieren, klappt es dann doch ;-D

das script sieht jetzt so aus:
Code:
            effectDivs: function(mode) {
                switch(mode) {
                    case 0:
                        //hier her kommt: effekt 1
                        this.effectDivs.delay(750, this, (mode+1));
                        break;
                        
                    case 1:
                        //hier her kommt: effekt 2
                        this.effectDivs.delay(750, this, (mode+1));
                        break;
                        
                    case 2:
                        //hier kommt etwas besonderes hin :-P
                        alert('es hat geklappt !!!');
                        break;
                        
                    default:
                        ;
                }
            },
Zum Aufrufen der Funktion:
Code:
            this.effectDivs(0);
... zwischendurch bin ich auch mal auf die Methode "Chain" getroffen, denn ich möchte ja mehrere Effekte ( , allerdings mehrerer Objekte, ) in Reihe ausführen ... der Clou an der ganzen Sache, warum ich eine Funktion mit einem Switch gewählt habe, ist, dass ich nicht immer alle Effekte brauche ... naja, vielleicht komm ich ja bald mit Fragen über die Chain-Methode wieder ;-D
 
Werbung:
Zurück
Oben