php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.06.2010, 08:50  
Erfahrener Benutzer
 
Benutzerbild von Squall
 
Registriert seit: 19.03.2009
Beiträge: 539
PHP-Kenntnisse:
Fortgeschritten
Squall befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] callback functions in JS Bibliotheken

Hallo community,

ich komme irgendwie mit den Callback function der ganzen JS-Bibliotheken nicht zurecht. Folgende syntax ist ja üblich:

PHP-Code:
objekt.function(parametercallbackFunction
In der regel sieht sowas ungefähr so aus:

PHP-Code:
objekt.doSomething(parameter, function() { do something after this }) 
Jetzt will ich aber dieser funktion parameter übergeben, doch irgendwie scheint das auch nicht ganz zu funktionieren. Im aktuellen Fall geht es um die GMap-API aber da ich generell probleme mit diesen callbacks habe suche nach einem Tutorial oder ähnlichem.

Hier noch ein Schnipsel vom aktuellen problem:

PHP-Code:
// an der stelle existiert eine variable "daten"
// die informationen enthält die ich in der callback function nutzen möchte
marker = new GMarker(new GLatLng(latlng), {iconmarkerIcon});
map.addOverlay(marker);

GEvent.addListener(marker"click", function() {
    
alert(daten); // geht nicht
}); 
Squall ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 29.06.2010, 08:57  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Doch, das muesste funktionieren, verwendete Variablen werden verfuegbar gemacht. Allerdings hast du bei Events natuerlich das Problem, dass die Funktion irgendwann ausgefuehrt werden koennte, sich der Wert der Variable also moeglicherweise seit der Deklaration veraendert hat. Auf die Variable wird nur verwiesen.


Sprich:
Code:
var daten = 5;
myFunc = function() {
  alert(daten);
}
daten = 6;
myFunc(); // Ausgabe = 6
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 29.06.2010, 09:03  
Erfahrener Benutzer
 
Benutzerbild von Squall
 
Registriert seit: 19.03.2009
Beiträge: 539
PHP-Kenntnisse:
Fortgeschritten
Squall befindet sich auf einem aufstrebenden Ast
Standard

richtig und genau aus dem Grund müsste ich eigentlich sowas wie

PHP-Code:
var daten 5;
myFunc = function(daten) {
  
alert(daten);
}
daten 6;
myFunc(); // Ausgabe = 6 
machen, was aber nicht funktioniert. Daher möchte ich mein wissen zu callbacks etwas vertiefen, sodass ich einen weg finde diese Problemathik anders zu lösen. Leider konnte ich aber bissher nirgendwo eine erklärung zu dem ganzen zeug finden. Als ob ich der einzige währe der callbacks nicht ganz versteht.
Squall ist offline   Mit Zitat antworten
Alt 29.06.2010, 09:21  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Du kannst das schon als Parameter nutzen, nur musst du den Parameter beim Aufruf dann eben auch uebergeben. Das schwierige ist glaube ich nicht das Verstaendnis fuer die Funktionalitaet (so wie ich das sehe auch bei dir nicht), sondern der Ueberblick ueber die Variablenscharen und Events, synchron, asynchron, per Referenz, Kopie, oder?
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 29.06.2010, 09:31  
Erfahrener Benutzer
 
Benutzerbild von Squall
 
Registriert seit: 19.03.2009
Beiträge: 539
PHP-Kenntnisse:
Fortgeschritten
Squall befindet sich auf einem aufstrebenden Ast
Standard

Nur hat sich der parameter zum zeitpunkt des aufrufs ja schon geändert. Und ja das ganze callback zeug treibt mich jedesmal in den wahnsinn. Sowohl bei Jquery als auch bei GMAP (die von mir am meisten verwendeten apis).

Hier mal der richtige Code zur verdeutlichung:
PHP-Code:
/*
 * showDealers ist ein array nach dem muster:
 * array(
 *   [0] => array(
 *       ['lat'] => 1245
 *       ['lng'] => 1245
 *       ['name'] => 'ich'
 *   )
 *   [1] => array(
 *       ['lat'] => 9871
 *       ['lng'] => 4567
 *       ['name'] => 'du'
 *   )
 *   usw....
 * )
 */
0;
do {
    
dealer showDealers[i];
    
    
markerIcon = new GIcon(G_DEFAULT_ICON);
    
    
marker = new GMarker(new GLatLng(dealer["lat"], dealer["lng"]), {iconmarkerIcon});
    
map.addOverlay(marker);
    
    
GEvent.addListener(marker"click", function() {
        
alert(dealer["name"]);
    });
    
i++;
} while(
showDealers.length); 
wenn ich i irgendwie der function übergeben könnte, dann könnte ich zumindest noch auf showDealers zugreifen, doch dass geht auch nicht -.-

Ich bin echt am ende.
Squall ist offline   Mit Zitat antworten
Alt 29.06.2010, 09:50  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Üblicherweise bekommst du für Events noch Zusatzinfos. Was gibt denn (bei aktiviertem Firebug)
Code:
GEvent.addListener(marker, "click", function() {
  console.log(arguments);
});
aus?
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 29.06.2010, 09:57  
Erfahrener Benutzer
 
Benutzerbild von Squall
 
Registriert seit: 19.03.2009
Beiträge: 539
PHP-Kenntnisse:
Fortgeschritten
Squall befindet sich auf einem aufstrebenden Ast
Standard

Ein Objekt, vermutlicherweise der "marker"
Miniaturansicht angehängter Grafiken
erledigt-callback-functions-js-bibliotheken-console_1.jpg  erledigt-callback-functions-js-bibliotheken-console_2.jpg  

Geändert von Squall (29.06.2010 um 10:01 Uhr).
Squall ist offline   Mit Zitat antworten
Alt 29.06.2010, 10:07  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Du hast dort aber ein ganz anderes Problem. Pro Schleifendurchlauf hast du ja unterschiedliche dealer["name"] Werte, diese werden aber in der Callbackfunktion nicht gespeichert! Heißt erst wenn du den Klick machst DANN wird die Callback ausgeführt UND DANN wird auf dealer["name"] zugegriffen. In dem Moment wird das wahrscheinlich gar nicht mehr existieren weil die do-while schon längst abgelaufen ist! Hier musst du also die Werte irgendwie außerhalb der do-while speichern und durch den Klick auf den Marker den richtigen Wert finden. Heißt vlt. könntest du IM Marker den Wert "name" Speichern und in der Callbackfunktion versuchen darauf zuzugreifen. Also vor der Callback marker.dealerName = "blub" und in der Callback dann sowas wie this.dealerName, bin mir aber da grad nicht sicher ob das alles so funktioniert.
Flor1an ist offline   Mit Zitat antworten
Alt 29.06.2010, 10:27  
Erfahrener Benutzer
 
Benutzerbild von Squall
 
Registriert seit: 19.03.2009
Beiträge: 539
PHP-Kenntnisse:
Fortgeschritten
Squall befindet sich auf einem aufstrebenden Ast
Standard

Das Problem war mir schon klar, nur kann ich keine Lösung finden. Hab nicht daran gedacht das ich selbst attribute definieren könnte. Aber folgender versuch:
PHP-Code:
do {
    
dealer showDealers[i];
    
    
markerIcon = new GIcon(G_DEFAULT_ICON);
    
    
marker = new GMarker(new GLatLng(dealer["lat"], dealer["lng"]), {iconmarkerIcon});
    
marker.dealerData dealer;
    
map.addOverlay(marker);
    
    
GEvent.addListener(marker"click", function() {
        var 
dealerData marker.dealerData;
    });
    
i++;
} while(
showDealersLength); 
führt auch nur dazu das dealer als referenz und nicht als kopie übergeben wird.
Squall ist offline   Mit Zitat antworten
Alt 29.06.2010, 10:29  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Mach mal in der Schleife marker.myOptions = i und lass das ganze wie eben auch ausgeben.

Edit: Ja deshalb probiers mal mit skalaren Werten.
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] was ist ein callback nuna PHP Tipps 2010 20 20.05.2010 17:36
[Erledigt] function.call-user-func-array: First argument is expected to be a valid ca stayInside PHP-Fortgeschrittene 2 22.09.2009 20:00
Fehler beim kompilieren von php 5.2.9 malio Server, Hosting und Workstations 11 05.06.2009 18:40
Functions output on a new page unix_united1980 PHP Tipps 2009 3 28.04.2009 08:07
Ausführing von functions in function fatsurfer PHP Tipps 2008 4 12.06.2008 13:21
functions problem PrisonerOfDreams PHP Tipps 2008 5 17.05.2008 09:41
PHP: Graphics: Special Effects: Wer kennt Bibliotheken? SvenLittkowski PHP-Fortgeschrittene 3 22.10.2007 16:50
Benutzt ihr PEAR oder andere proffesionelle Bibliotheken? Matthiasnet Off-Topic Diskussionen 3 03.08.2007 23:03
[Erledigt] Autoloading Functions?? PHP-Fortgeschrittene 21 25.10.2005 12:25
Callback handler kann nicht aufgerufen werden PHP Tipps 2005-2 4 21.08.2005 18:44
Functions problem... PHP Tipps 2005-2 1 24.06.2005 16:40
variable als functions namen benutzen PHP-Fortgeschrittene 9 13.02.2005 04:22
Gebräuchliche Bibliotheken PHP Tipps 2004 1 24.09.2004 16:27
Sessions und Functions PHP Tipps 2004 3 21.08.2004 10:38
functions PHP Tipps 2004 9 09.06.2004 15:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
js callback, javascript callback function, javascript callback tutorial, js callback function, js callback funktionen, javascript callback function wiki, javascript callback benutzen, javascript callback deutsch, callback javascript tutorial, callback funktion javascript erklärung, javascript callback function example, jacascript callbackfunktion werte übergeben, javascript callback, javascript callback function parameter, javascript callback function tutorial, javascript callback german, was ist eine js callback funktion, js call back, javascript callback function problem, callback js

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:52 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum