Ergebnis 1 bis 15 von 15
  1. #1
    IrisKant ist offline Grünschnabel
    registriert
    07-03-2011
    Beiträge
    7

    Lightbulb Wie kann ich Parameter an Callback-Funktion weiterreichen

    Ich würde gern den Icon-Text für jedes Icon auf der Karte ändern, stelle mich aber irgendwie zu blöd an. Ihr seht in der LoadMap-Funktion wie ich versuche Variable tex zu ändern, was aber so nicht geht.
    Ich würde auch gerne unterschiedliche Icon (als Grafik) verwenden, weiß aber nicht, wie ich das anfangen könnte.
    Ich erstelle die "statische" Webseiten mit einem externen Programm, wobei ich die Orte aus einer Datenbank abfrage. Das passiert genau an der Stelle wo: StartGeocoding("Halle-Saale"); steht.
    Das werden dann mal eben 1000 Orte, wobei ich dann die auf einer Karte darstellen möchte.
    In Google geht das garnicht, da ist Geocoding begrenzt, deshalb mit bing-map.

    Code:
    <script type="text/javascript">
             var myMap = null;
             var tex = "Text";
             var jb = new VELatLong(52, 12);
             function LoadMap()
             {
                myMap = new VEMap("mapDiv");
                myMap.LoadMap();
    
                tex = "Text1";
                StartGeocoding("Halle-Saale");
                tex = "Text2";
                StartGeocoding("Berlin HBf");
                tex = "Text3";
                StartGeocoding("Biederitz");
             }
    
             function UnloadMap()
             {
                if (myMap != null) {
                   myMap.Dispose();
                }
             }
    
             function StartGeocoding( address )
             {
              myMap.Find(null,    // what
                         address, // where
                         null,    // VEFindType (always VEFindType.Businesses)
                         null,    // VEShapeLayer (base by default)
                         null,    // start index for results (0 by default)
                         null,    // max number of results (default is 10)
                         null,    // show results? (default is true)
                         null,    // create pushpin for what results? (ignored since what is null)
                         false,    // use default disambiguation? (default is true)
                         null,    // set best map view? (default is true)
                         GeocodeCallback );  // call back function
             }
             function GeocodeCallback(shapeLayer, findResults, places, moreResults, errorMsg)
             {   // if there are no results, display any error message and return
              if(places == null)
              {
               alert( (errorMsg == null) ? "Kein echtes Ergebnis gefunden" : errorMsg );
               return;
              }
              var bestPlace = places[0];
              var location = bestPlace.LatLong;
              var newShape = new VEShape(VEShapeType.Pushpin, location);
              var desc = "Latitude: " + location.Latitude + "<br>Longitude:" + location.Longitude;
              newShape.SetDescription(desc);
              newShape.SetTitle(bestPlace.Name);
              var icon = "<div style='font-size:12px;border:solid 1px" +
                         "Black;background-color:Aqua;width:25px;'>"+tex+"</div>"; //
              myMap.ShowMessageBox = false;
              newShape.SetCustomIcon(icon);
              myMap.AddShape(newShape);
              myMap.SetCenterAndZoom(jb, 6);
             }
          </script>

    Bitte um Hilfe...

  2. #2
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Stichwort closures

    Das folgende Beispiel verstehen und dann anwenden:
    PHP-Code:
          function mklater(text,ms){
            
    setTimeout(function(){alert(text)},ms);
          }
          var 
    t1="t1";
          
    mklater(t1,5000);
          
    t1="t2";
          
    mklater(t1,15000); 

  3. #3
    IrisKant ist offline Grünschnabel
    registriert
    07-03-2011
    Beiträge
    7

    Unhappy AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Das ist nicht Dein Ernst, oder?

    Bei 1000 Orten möchte ich nicht bis nach Ostern warten

    Wie übergebe ich einen zusätzlichen Parameter an die Callback-Funktion? Habe mal was gehört mittels .apply, ich weiß nur nicht, wie das geht.

    GeocodeCallback(tex) geht jedenfalls nicht so einfach. Auch mit GeocodeCallback.apply(tex) weiß ich nicht weiter. (Wo muß denn der Parameter in der Callback-Funktion hin?

  4. #4
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Ich fürchte du hast weder nachgesehen was Closures sind noch mein Beispiel verstanden.

  5. #5
    IrisKant ist offline Grünschnabel
    registriert
    07-03-2011
    Beiträge
    7

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Fürchte ich auch.

    Unter Closures kann man sehr viel hochwissenschaftliches Zeug lesen, leider fehlen die leichtverständlichen Erklärungen.

    Dein Quelltext erklärt mir auch nicht, wie's funktioniert ;-(

  6. #6
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Also hier wird es verständlich erklärt.
    Bei meinem beispiel dient setTimeout auch nur als Hilfskonstruct dazu, die Callbackfunktion iregendwann aufzurufen. Ev. eine 2. Variante:
    PHP-Code:
    function mklater(text,ms){
      function 
    callback(){alert(text)};
      
    setTimeout(callback,ms);
          }
    var 
    t1="t1";
    mklater(t1,2000);
    t1="t2";
    mklater(t1,5000); 
    Dadurch daß callback innerhalb von mklater definiert ist behält text seinen Wert gespeichert.
    Beim ersten Aufruf "t1" und beim 2.Aufruf "t2". Die callback wird erst aufgerufen nachdem beide mklater-Aufrufe erfolgt sind!

  7. #7
    IrisKant ist offline Grünschnabel
    registriert
    07-03-2011
    Beiträge
    7

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Vielleicht frage ich verkehrt. Wie schaffe ich es, der function GeocodeCallback meine unterschiedlichen Icon-Dateien mitzugeben oder den Text individuell anzupassen.
    Den Sinn Deines Codes verstehe ich jetzt schon besser, weiß aber nicht, wie ich dieses Konstrukt in meinem Script verwenden sollte.

  8. #8
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    GeocodeCallback mit in die function StartGeocoding nehmen und StartGeocoding mit dem parameter tex versehen.

  9. #9
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.667

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Zitat Zitat von IrisKant Beitrag anzeigen
    weiß aber nicht, wie ich dieses Konstrukt in meinem Script verwenden sollte.
    du schreibst dir eine funktion mkCallback mit den parametern die du benötigst. diese funktion erzeugt dein callback (als closure). innerhalb des callbacks kannst du dann auf diese parameter zugreifen.

  10. #10
    IrisKant ist offline Grünschnabel
    registriert
    07-03-2011
    Beiträge
    7

    Lightbulb AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    So, Ihr Lieben!
    Ich habe es (etwas unbewußt) geschafft. Dazu noch eine Frage:

    Die
    Code:
    function GeocodeCallback(shapeLayer, findResults, places, moreResults, errorMsg)
    hat ja 5 Parameter, aber im Aufruf wird nur der Name angegeben, ohne Klammern. Das ist mir schleierhaft, warum dies so geht. Könnt Ihr mich hier noch etwas aufklären. Ihr habt ja sicherlich bemerkt, das der Code-Schnipsel von Microsoft ist und nicht von mir. (Plagiat ;-)
    Quelle: http://msdn.microsoft.com/en-us/library/cc161074.aspx

    Mein funktionierendes Ergebnis (der Vollständigkeit halber)
    Code:
    <script type="text/javascript">
             var myMap = null;
             var tex = "Text";
             var jb = new VELatLong(52, 11.7); // Biederitz als Zentrum meiner Welt
             function LoadMap()
             {
                myMap = new VEMap("mapDiv");
                myMap.LoadMap();
                StartGeocoding("Halle-Saale", "1", "");
                StartGeocoding("Berlin HBf", "2", "");
                StartGeocoding("Biederitz", "", "<img src=http://forum.jswelt.de/images/icons/icon10.gif>");
             }
             function UnloadMap()
             { if (myMap != null) { myMap.Dispose(); }  }
    
             function StartGeocoding( address, text, img )
             {
               function GeocodeCallback(shapeLayer, findResults, places, moreResults, errorMsg)
               {   // if there are no results, display any error message and return
                if(places == null){ alert( (errorMsg == null) ? "Kein echtes Ergebnis gefunden" : errorMsg );
                return;  }
               var bestPlace = places[0];
               var location = bestPlace.LatLong;
               var newShape = new VEShape(VEShapeType.Pushpin, location);
               var desc = "Breite: " + location.Latitude + "<br>L&auml;nge:" + location.Longitude;
               newShape.SetDescription(desc);
               newShape.SetTitle(bestPlace.Name);
               var icon = "<div style='font-size:12px;border:solid 1px" +
                          "Black;background-color:Aqua;width:25px;'>"+text+"</div>"; //
               if (text == "") { icon = img };
               myMap.ShowMessageBox = false;
               newShape.SetCustomIcon(icon);
               myMap.AddShape(newShape);
               myMap.SetCenterAndZoom(jb, 6);
               }
              myMap.Find(null,    // what
                         address, // where
                         null,    // VEFindType (always VEFindType.Businesses)
                         null,    // VEShapeLayer (base by default)
                         null,    // start index for results (0 by default)
                         null,    // max number of results (default is 10)
                         null,    // show results? (default is true)
                         null,    // create pushpin for what results? (ignored since what is null)
                         false,    // use default disambiguation? (default is true)
                         null,    // set best map view? (default is true)
                         GeocodeCallback );  // call back function
             }
          </script>
    Und übrigends: VIELEN DANK!
    Geändert von IrisKant (07-03-2011 um 18:35 Uhr)

  11. #11
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Funktionen sind in JS auch Objekte und können in Variablen gespeichert werden:
    Code:
    var hallo = function test(){alert("hallo";};
    hallo();
    du übergibst der Funktion myMap.Find somit einfahc eine Refernez auf das Funktionsobjekt, das dann in dieser Funktion aufgerufen wird.

  12. #12
    IrisKant ist offline Grünschnabel
    registriert
    07-03-2011
    Beiträge
    7

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Danke !
    Aber wieso ohne Klammern und Parameter?

  13. #13
    Avatar von jspit
    jspit ist offline Lounge-Member
    registriert
    19-06-2009
    Beiträge
    1.712

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Mit Klammern und möglichen Parametern tätigst du einen Funktionsaufruf. Wird dies als Parameter übergeben, wird die Funktion ausgeführt und der return-Wert als Parameter weitergegeben.
    Wird nur der Name oder eine entsprechende Variable als Parameter übergeben, dann wird nur eine Referenz auf die Funktion übergeben. Der Aufruf erfolgt dann zu einem späteren Zeitpunkt. Der Aufrufer muß dann wissen welche Parameter benötigt werden.
    Dazu wieder ein kleines Beispiel:
    PHP-Code:
    function test(p){return p}
    function 
    mtype(p){alert("type=" typeof(p) + " wert="+p)}
    mtype(test(1));
    mtype(test); 
    Beispiel Online

    Edit:
    Das Javascript Online Tool ist besonders für solche kleinen Tests m.E. gut geeignet
    Geändert von jspit (08-03-2011 um 07:36 Uhr)

  14. #14
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.667

    AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Zitat Zitat von IrisKant Beitrag anzeigen
    Aber wieso ohne Klammern und Parameter?
    weil es mit klammern dann wieder ein funktionsaufruf ist


    Code:
    function test(param){alert(param) ; };
    var hallo = test; // zuweisung
    hallo("hallo");    // aufruf

  15. #15
    IrisKant ist offline Grünschnabel
    registriert
    07-03-2011
    Beiträge
    7

    Thumbs up AW: Wie kann ich Parameter an Callback-Funktion weiterreichen

    Ziemlich abstract, aber ich glaube etwas gelernt zu haben. Danke!

    Der Link zu Beispiel Online ist cool.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 02-06-2010, 10:12
  2. Callback-Funktion kann nicht aufgerufen werden!
    Von Stefan125 im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 23-02-2010, 20:36
  3. Callback funktion ?
    Von Stefan125 im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 07-11-2009, 15:02
  4. Callback Funktion wird nicht ausgefuehrt
    Von eipie im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 14-04-2009, 07:43
  5. Funktion in einer Callback-Funktion aufrufen
    Von ShoAn im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 18-03-2009, 13:19

Stichworte

Lesezeichen

Berechtigungen

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