2009-08-03 14 views

Antwort

2

Es ist nicht möglich, die Größe des Infofensters zu animieren, aber es gibt eine reset Funktion. Die Dokumentation besagt, dass Sie einen Parameter auf Null setzen können, aber wenn Sie den Parameter 'size' auf null setzen, erhalten Sie einen Fehler. Das bedeutet, dass Sie die Größe des InfoWindows angeben müssen.

Da jedoch der ursprüngliche Punkt der dynamischen Größenänderung des Fensters, ruiniert, würde ich dringend empfehlen, einfach das ursprüngliche Infofenster zu schließen und ein neues zu erstellen - was ist, was die Reset-Funktion erscheinen wird, irgendwie zu tun.

+0

Danke, beide Antworten waren hilfreich .. Allerdings habe ich stattdessen ein maximiertes Fenster verwendet, das meiner App gut passte, und ich liebe einfach die Animation, die du bekommst, wenn sie maximiert ist ;-) – Morten

+0

Großartig! Ich habe sogar darüber nachgedacht, das maximierte InfoWindow zu empfehlen, aber ich war mir nicht sicher, ob Sie das wollen würden, wenn die Ajax-Daten kurz wären. –

4

Überprüfen Sie Folgendes. Was passiert, ist, dass ich ein erstes Info-Fenster mit minimalen Informationen erstellen (siehe getInfoWindowHtml). Der Aufruf gmap.openInfoWindowHtml bietet einen Callback, der nach dem Öffnen des Infowindows aufgerufen wird. Rufen Sie in diesem Rückruf Ihren Ajax-Anruf auf und setzen Sie den Fensterinhalt zurück. Es gibt zwei Probleme aber:

konnte nicht ich das Fenster bekommen, um die Größe genau zu dem zurückgegebenen Inhalt, so dass ich nur verwendete eine Standardgröße (siehe die neue GSize (300, 150) in der anonymen Funktion zurück von markerClickFn)

  1. Wenn sich ein Marker in der Nähe der Extremwerte der Bildgrenzen befindet, werden Teile des Infofensters abgeschnitten. IOW, die Karte stimmt nicht mehr mit dem Infowindow überein. Ich kann das wahrscheinlich beheben, aber es war kein dringendes Problem.

    function markerClickFn(venue, latlng) { 
        return function() { 
        var title = venue.Name; 
         var infoHtml = getInfoWindowHtml(venue); 
         // need to zoom in 
         gmap.setZoom(13); 
         gmap.openInfoWindowHtml(latlng, infoHtml, 
          { 
           onOpenFn: function() { 
            var iw = gmap.getInfoWindow(); 
            iw.reset(iw.getPoint(), iw.getTabs(), new GSize(300, 150), null, null); 
            $("#info-" + venue.Id.toString()).load("/Venue/MapInfoWindow/" + venue.Id); 
           } 
          } 
          ); 
    
        }; 
    } 
    
    function getSidebarHtml(venue) { 
        var url = "/Venue/Details/" + venue.Id; // actually should bring up infowindow 
        var html = "<li id='venue-" + venue.Id + "'>\n"; 
        html = html + venue.Name + "\n"; 
        //html = html + "<p class='description'>" + trunc(venue.Description, 200) + "</p>\n";   
        html = html + "</li>"; 
        return html; 
    } 
    
    function getInfoWindowHtml(venue) { 
        var url = "/Venue/Details/" + venue.Id; // actually should bring up infowindow 
        var html = "<div id='info-" + venue.Id + "'><a href='" + url + "' class='url summary'>" + venue.Name + "</a></div>\n"; 
        return html; 
    } 
    
    function addVenueMarker(venue) { 
        var icon = new GIcon(G_DEFAULT_ICON); 
        icon.image = "http://chart.apis.google.com/chart?cht=mm&amp;chs=24x32&amp;chco=FFFFFF,008CFF,000000&amp;ext=.png"; 
    
        var latLng = new GLatLng(venue.Lat, venue.Lng); 
        var marker = new GMarker(latLng, { icon: icon }); 
        var fn = markerClickFn(venue, latLng); 
        GEvent.addListener(marker, "click", fn); 
        marker.event_ = venue; 
        marker.click_ = fn; 
        venue.marker_ = marker; 
        markers.push(marker); 
        return marker; 
    } 
    
3

Es sieht aus wie die einzige Lösung, die ich das Infofenster dynamisch, um die Größe zu finden ist das Infofenster des setContent Methode aufzurufen. Sie müssen den HTML-Knoten oder die HTML-Zeichenfolge übergeben. Dies zeichnet das InfoWindow grundlegend neu. Was es im Wesentlichen macht, ist das Schließen des aktuellen und das Öffnen eines neuen. Es wird also während des Neuladens des Inhalts ein Flimmern auftreten. Diese Art von saugt. Es sieht so aus, als ob Google die v2-API eingestellt hat und es in der neueren Version sehr schwierig gemacht hat. Ich denke, Google hat eine Reihe von Sun Java-Entwicklern auf der anderen Straßenseite im Silicon Valley angeheuert, und die Leute wissen nicht, wie man einfach zu verwendende APIs wie das Microsoft-Camp bereitstellt. Wirklich frustrierend!

Verwandte Themen