mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Mo 21.05.2012 13:21 Benutzername: Passwort: Auto-Login

Thema: Javascript - Denkanstoß! vom 16.12.2011

Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Javascript - Denkanstoß!
Autor Nachricht
pixelpapst303
Moderator
Threadersteller

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 38
Geschlecht: Männlich
Verfasst Fr 16.12.2011 17:13
Titel

Javascript - Denkanstoß!

Antworten mit Zitat Zum Seitenanfang

moin zusammen,

ich bau mir gerade eine js-lib für eine applikation zusammen. ala:

Code:

                  appname = {
               init:function(args){
                  
                  if(typeof(args)!='object') {
                     alert('Es wurden keine Daten übergeben.');
                     return false;
                  }

                  if (args['waswillich']=='funktionsablauf1') {

                  this.SchrittEins();
                                                this.SchrittZwei();

                                                }
                           
               },
               /****
               *
               *         schritt1
               *
               *****/
               SchrittEins:function () {
                  // sehr viel code
               },
                                        /****
               *
               *         schritt2
               *
               *****/
               SchrittZwei:function () {
                  // sehr viel code
               },

....


....


....





das ist jetzt lediglich ein beispielaufbau und stark vereinfacht...

je nachdem, welche args übergeben werden, sollen verschiedene methoden schritt1 und schritt2 oder schritt5 aufgerufen werden. da ich nicht aus schritt1 schritt2 aufrufen möchte, soll das oben passieren.

allerdings soll sinnigerweise schritt2 erst aufgerufen werden, wenn schritt1 durch ist. callback, listener... oder wie auch immer man es nennen will.

wie würden es die js-cracks machen?

es sei noch zu erwähnen, dass in schritt1 ein ajax-call sein kann, sodass schritt2 im o.a. beispiel gern mal ausgeführt wird, wenn schritt1 noch garnicht so weit is...


ansatzänderungen? beispiele? anregungen?

danke und guten start ins wochenende


Zuletzt bearbeitet von pixelpapst303 am Fr 16.12.2011 17:14, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
fyll

Dabei seit: 20.09.2003
Ort: Augsburg
Alter: 27
Geschlecht: Männlich
Verfasst Fr 16.12.2011 19:17
Titel

Re: Javascript - Denkanstoß!

Antworten mit Zitat Zum Seitenanfang

pixelpapst303 hat geschrieben:
...es sei noch zu erwähnen, dass in schritt1 ein ajax-call sein kann, sodass schritt2 im o.a. beispiel gern mal ausgeführt wird, wenn schritt1 noch garnicht so weit is...
Deswegen musst doch fast schritt2 aus schritt1 aus nachm success aufrufen.
Da könntest höchstens oben nen Timeout reinbaun oder (kein plan ob das geht) beim success n dom ändern und oben mit live() auf change() prüfen...
  View user's profile Private Nachricht senden
phihochzwei
Moderator

Dabei seit: 08.06.2006
Ort: Essen
Alter: 34
Geschlecht: Männlich
Verfasst Fr 16.12.2011 19:42
Titel

Antworten mit Zitat Zum Seitenanfang

switch/case ???
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
sahnemuh

Dabei seit: 19.06.2003
Ort: /dev/null
Alter: 30
Geschlecht: Männlich
Verfasst Sa 17.12.2011 12:17
Titel

Antworten mit Zitat Zum Seitenanfang

http://bobnadler.posterous.com/javascript-patterns-callback
  View user's profile Private Nachricht senden
pixelpapst303
Moderator
Threadersteller

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 38
Geschlecht: Männlich
Verfasst Sa 17.12.2011 13:08
Titel

Antworten mit Zitat Zum Seitenanfang

danke für die antworten

- switch/case bringt mich da leider nicht weiter.
- timeout oder dom-manipulation sind mir zu ... dreckig *zwinker*
- die success im ajaxcall ist klar, aber sie wird je nach dem, was gemacht werden soll immer was anderes aufrufen müssen (schritt2, oder aber auch schritt74).

deswegen ist das der bisher besste ansatz:

sahnemuh hat geschrieben:
http://bobnadler.posterous.com/javascript-patterns-callback


danke dafür. wenn ich nach der methode also eine verkettung von fuctionen aufrufe, würde ich das so angehen:

Code:

this.schritt1([this.schritt2,this.schritt3]);


Code:

schritt1:function (callbackQueue) {
   // some code...
   callbackQueue.shift()
   callbackQueue[0]();
},
schritt2:function (callbackQueue) {
   // some code...
   callbackQueue.shift()
   callbackQueue[0]();
},
schritt3:function (callbackQueue) {
   alert ('fertig');
},
...
...
...



frage: ist das gängige praxis... also "sauber", oder gibt es da noch andere ansätze?


edit PS: mir fiel gerade auf, dass ich das "geshifte" functions-array gar nicht aktiv weitergegeben habe ala
Code:

callbackQueue[0](callbackQueue);


dennoch functioniert es. warum ist "callbackQueue" in dem falle sowas wie global? oder was für ein scope greift da?

PPS: NIX global. dummer denkfehler meinerseits Grins

neuer code...

Code:

this.schritt1(['NULL',this.schritt2,this.schritt3]);


Code:
   
...      
},
schritt1:function (callbackQueue) {
// some code...
callbackQueue.shift();
callbackQueue[0](callbackQueue);
},
schritt2:function (callbackQueue) {
// some code...
callbackQueue.shift();
callbackQueue[0](callbackQueue);
},
schritt3:function (callbackQueue) {
alert ('fertig');
},
...


Zuletzt bearbeitet von pixelpapst303 am Sa 17.12.2011 13:36, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
zweitaccount

Dabei seit: 25.01.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Sa 17.12.2011 23:59
Titel

Antworten mit Zitat Zum Seitenanfang

Hi, so kann mans schon machen, ich würds aber eher so konstruieren,
dass die funktionen selbst gar nichts über die queue wissen:

Code:
<script type="text/javascript">
            var myApp = {
                queue: [],
                init: function(queue){
                    if (queue) {
                        this.resetQueue(queue);
                    }
                    this.execute();
                },
                resetQueue: function(queue) {
                    this.queue = [];
                    this.addToQueue(queue);
                },
                addToQueue: function(queue) {
                    if (typeof queue == 'object') {
                        this.queue = this.queue.concat(queue);
                    }
                },
                execute: function(){
                    document.write('queue: ' + this.queue + '<br>execute: ');
                    if (this.queue.length && this[this.queue.shift()]()) {
                        this.execute();
                    } else {
                        document.write['- done'];
                    }
                },
                step1: function(){
                    document.write('step1<hr>');
                    // true zurückgeben - queue wird weiter abgearbeitet
                    return true;
                },
                step2: function(){
                    // Beispiel Verzögerung. Ein onSuccess Event könnte z.B. myApp.execute() starten
                    document.write('step2<hr>');
                    window.setTimeout("myApp.execute()", 3000);
                    // false zurückgeben - queue wird nicht weiter abgearbeitet
                    return false;
                },
                step3: function(){
                    document.write('step3<hr>');
                    return true;
                },
                step4: function(){
                    // Beispiel - weitere functionen zur queue hinzufügen
                    document.write('step4<hr>');
                    this.addToQueue(["step3","step2","step1","step5"]);
                    return true;
                },
                step5: function(){
                    // Beispiel - Queue ersetzen
                    document.write('step5<hr>');
                    this.resetQueue(["step1"]);
                    return true;
                }
            };
            myApp.init(["step1","step2","step3","step4"]);
        </script>


Grüße
zweitaccount
  View user's profile Private Nachricht senden
pixelpapst303
Moderator
Threadersteller

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 38
Geschlecht: Männlich
Verfasst So 18.12.2011 14:15
Titel

Antworten mit Zitat Zum Seitenanfang

auch ein ansatz. danke.

mittlerweile habe ich jedoch auch davon abgesehen die gesamte queue an jede einzelne funktion zu übergeben, sondern lass das eine controller-funktion machen.

addTo etc. brauche ich in meinem falle nicht.

Code:

...
this.globalitems['queueCount'] = 0;
this.callbackQueue = [this.step1,this.step2];
this.queueController();
...


Code:

queueController:function () {
   if (this.globalitems['queueCount'] != 0) {
      this.callbackQueue.shift();
   }
   this.globalitems['queueCount']++;
   if(typeof(this.callbackQueue[0])==='function') {
      this.log('Queuecount: '+this.globalitems['queueCount']);
      this.callbackQueue[0]();
   } else {
      this.log('Queue done!');
   }
},
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Javascript - Denkanstoß
Actionscript und Flash, Denkanstoß zu Torwandschießen bitte
Denkanstoß: Daten speichern, wenn Browser geschlossen wird
[Flash MX] Brauche Denkanstoß - dyn. Menü aus XML / rekursiv
[Flash] OS X Dock Anpassung, brauch mal nen Denkanstoß
[javascript] mit <select> feld wert an javascript funk
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.