Synonym hat geschrieben:Ansonsten hört sich das was Du sagt so an wie das, was ich in meinem beiden letzten Absätzen geschrieben hatte, nur dass meine Umsetzung etwas anders aussieht. Dachte eigentlich das wäre komplett falsch :)
Du hattest damit schon den vollkommen richtigen Ansatzpunkt gefunden, für die Umsetzung gibt's allerdings einen Abzug in der B-Note :) Dies ist dein Code:
Code: Alles auswählen
if (locations.length)
{
centerBounds = new google.maps.LatLngBounds();
for (var i = 0; i < locations.length; i++)
{
var point = new google.maps.LatLng(locations[i].getAttribute("lat"), locations[i].getAttribute("lng"));
centerBounds.extend(point);
}
}
if(centerBounds) setMyCenter();
else map.setCenter(); // default
Du hast direkt über deiner if(centerBound)-Bedingung einen weiteren if-Block (prüft locations.length). In diesem Block wird centerBounds erzeugt, so dass du auf deine eigene if-Bedinung verzichten könntest, wenn du den setMyCenter()-Aufruf einfach eine Zeile höher in diesen Block verschiebst:
Code: Alles auswählen
if (locations.length)
{
centerBounds = new google.maps.LatLngBounds();
for (var i = 0; i < locations.length; i++)
{
var point = new google.maps.LatLng(locations[i].getAttribute("lat"), locations[i].getAttribute("lng"));
centerBounds.extend(point);
}
setMyCenter();
}
else // locations.length == 0
{
map.setCenter(); // default
}
Schaust du nach dieser kleinen Änderung nochmal in meinen Ansatz mit aktion() weiter oben, wirst du feststellen, dass er in der Tat nahezu identisch mit deinem ist. Oder kurz: Eigentlich konntest du dir sehr gut selbst helfen :)
das mit dem "aktion" habe ich nun verstanden. Hatte da echte Probleme mit, wenn Variablen (Objekte) und Funktionen genauso heißen.
Wie gesagt, in Javascript ist alles ein Objekt, auch eine Funktion. Deshalb stecken Funktionen eigentlich ebenfalls in Variablen, eine Funktionsdefinition, wie du sie als
function bla() {… kennst, erzeugt eigentlich eine Variable bla vom Typ function, ist also identisch mit
var bla = function () {… Probier's aus:
Code: Alles auswählen
function a() {
alert("Funktion A");
}
function b() {
alert("Funktion B");
}
var funktion = function () {
alert("Ursprüngliche Funktion");
}
// funktion() mit ursprünglichem Inhalt aufrufen.
funktion();
// funktion durch den Code von Funktion a ersetzen:
funktion = a;
funktion();
// funktion durch den Code von Funktion b ersetzen:
funktion = b;
funktion();
Dementsprechend lassen sich Funktionen auch ganz normal als Argument übergeben.
aber mit der Übergabe als Argument bist du flexibler
In Bezug auf was? Was wäre da denn genau der Unterschied dazu? Ich könnte ein anderes Argument übergeben, ok, das ist klar, aber das gibt es nie.
Ich wusste nicht, wo du überall centerBounds benötigst und von wo aus du dementsprechend loadMyCenter() aufrufen müsstest. Gibt es neben setMyCenter() noch eine Funktion, die centerBounds verwendet, zB andererCenter() wäre es unklug, in loadMyCenter() fix setMyCenter() aufzurufen – dann rufst du andererCenter() auf, andererCenter() ruft loadMyCenter() auf und dieses dann setMyCenter(), obwohl du eigentlich andererCenter() haben wolltest.
Mit dem Funktions-Argument bei loadMyCenter() hast du mehr Kontrolle:
Code: Alles auswählen
function setMyCenter()
{
if(!centerBounds) // centerBounds existiert noch nicht, laden
{
loadMyCenter(setMyCenter);
}
else
{
map.setCenter(centerBounds.getCenter());
map.setZoom(map.getBoundsZoomLevel(centerBounds));
}
}
function andererCenter()
{
if(!centerBounds) // centerBounds existiert noch nicht, laden
{
loadMyCenter(andererCenter);
}
else
{
centerBounds.irgendwas_anderes();
}
}
Ist hingegen sichergestellt, dass loadMyCenter() immer nur von setMyCenter() aufgerufen wird, brauchst du das nicht. Allerdings wäre dann die Frage, warum du loadMyCenter() überhaupt in eine separate Funktion ausgelagert hast – sowas macht man ja nur, wenn man den Inhalt von verschiedenen Stellen aus aufruft.