Dies ist mein erster Ausflug in OO JS, mit Problemen.OO JS & Google Maps API: Was mache ich falsch?
Idealerweise würde ich in diesem Szenario ein mapLocation-Objekt haben, das ich einfach in Koordinaten, Icon, dem HTML-Code übergeben könnte, der beim Klicken angezeigt wird, und das wars. Ich würde es meiner Google Map auf der Seite hinzufügen und ich hätte etwas wiederverwendbares. Offensichtlich würde dies später refaktoriert werden.
Auch bin ich nicht besonders glücklich darüber, wie mein Code im Moment aussieht. :)
Hier ist das Objekt, mit dem ich komme.
function mapLocation() {
this.lat = 0;
this.lng = 0;
this.icon = '';
this.html = '';
this.getLocation = getLocation;
}
function getLocation() {
var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
var letteredIcon = new GIcon(baseIcon);
letteredIcon.image = this.icon;
var point = new GLatLng(this.lat, this.lng);
var marker = new GMarker(point, { icon:letteredIcon });
function show() {
marker.openInfoWindowHtml('Lat: '+this.lat+'<br />Lng: '+this.lng+'<br /><img src="'+this.icon+'" />');
}
alert(this.lat);
GEvent.addListener(marker, "click", show);
return marker;
}
Und hier ist meine Implementierung.
var a = new mapLocation;
a.lat = 52.136369;
a.lng = -106.696299;
a.icon = 'http://www.google.com/mapfiles/markerA.png';
a.html = 'asdf fdsa';
var b = a.getLocation();
map.addOverlay(b);
So bekomme ich Fenster angezeigt, mein Marker, aber show() -Funktion Pop-up mit undefiniert drin.
Ich bin gespannt, was ich falsch mache - wie ich falsch denke - in diesem Problem.
Danke für das Aussehen.
Eine weitere Sache :) Sie sollten immer die öffnende Klammer am Ende der Zeile anstelle einer neuen Zeile in JavaScript einfügen, sonst können Sie ungerade Parsing-Probleme bekommen. Siehe http://www.youtube.com/watch?v=hQVTIJBZook&feature=player_embedded#t=30m38s – noah
@Noah: Das hat wesentlich mehr mit Rückgabeanweisungen und impliziten Anweisungsbeendigungen zu tun als mit geschweiften Klammern. Ordnungsgemäß als Sicherheitsmerkmal, aber besser implicits vollständig zu vermeiden. – annakata
Das ist eine großartige Präsentation, die es sich zu sehen lohnt. Der wichtige Imbiss ist, dass Code-Stil in JS mehr als nur Stil ist. – GloryFish