Frage

Ich habe eine datengesteuerte Google Map mit verschiedenen Symbolen aufgebaut, die auf die Karte von der Art der Artikel befindet sich je zugewiesen bekommen. Also, wenn ich 5 verschiedene Wahrzeichen haben, und jeder bekommt ein anderes Symbol (Laden, Bibliothek, Krankenhaus, etc.) - was ich möchte zu tun, das Google-Symbol erzeugen Objekte dynamisch. Ich war so etwas wie diese zu denken:

types = array('hospital','church','library','store',etc);
var i=0;
while (i<=types.length) {

    var landmark + i = new google.maps.Icon();
    landmark.image = "icon" + i + ".png";
    i++;
    } 

Doch wie Sie wahrscheinlich schon erraten haben, das funktioniert nicht. Ich habe auch versucht eval, wie folgt aus:

while (i<=types.length) {
        doIcon(i);
        i++;
    }   

    function doIcon(i){ 
        eval("var landmark" + i + " = new.google.maps.Icon();");
        return eval("landmark" + i);
    }

, aber es hat nicht funktioniert either-- ich JavaScript-Variablen alle Hinweise zu schätzen wissen würde dynamisch zu erzeugen. Es hat rein js sein, ich es in PHP tun könnte, aber das ist keine Option hier.

Danke!

War es hilfreich?

Lösung

Es ist wirklich einfach zu tun: object["variablename"] = whatever;

So zum Beispiel könnten Sie ein Objekt haben: var Landmarks = {} und man konnte, um es wie so hinzufügen. Landmarks["landmark" + i] = new google.maps.Icon(); und es auf diese Weise passieren

Wenn Sie diese Variablen müssen in der global (warum auch?) Können Sie das globale Objekt zugreifen können direkt window verwendet wird.

Andere Tipps

Wenn du gehst, es zu tun, einen deklarierten Objekt wie Landmark["landmark" + i] verwenden, können Sie wirklich so gut kann ein Indexfeld verwenden, anstatt ein assoziatives, ist es viel einfacher für Iteration. Die Objekte sind wirklich nicht mit indizierten Eigenschaften verwendet, weil Arrays tut viel besser davon:

var myObj =           // object version
{
   "item0": "blah",
   "item1": "blah"
   // etc
}
var myArr =           // array version
[
   "blah",
   "blah"
   // etc
]

Viel mehr sinnvoll, die Array zu verwenden:

landmarks = []; // new array
types = array('hospital','church','library','store',etc);  
var i=0;  
while (i<=types.length) {  
    landmarks.push(new google.maps.Icon());
    landmarks[i].image = "icon" + i + ".png";
    i++;  
}

Es macht mehr Sinn, es so zu tun und for...in Schleifen auf Objekte kann ein wenig chaotisch mit prototypisiert Eigenschaften sind zählbare, etc.

Wenn Sie versuchen, eine Variable global zu machen, fügen Sie es das Fensterobjekt:

var myCustomVar = "landmark" + i;
window[myCustomVar] = new google.maps.Icon();

alert(landmark0);

Aber dies würde den globalen Namensraum mit vielen unnötigen Variablen verschmutzt sein. Also würden Sie noch besser mit einem Array:

window.landmarks = [];
landmarks.push(new google.maps.Icon());
// etc...

Sie Ihre Frage direkt zu beantworten (obwohl Sie bitte, dass Hinweis: Dies ist nicht die Lösung, die Sie möchten. Überprüfen Sie die anderen Antworten aus. Dies ist nur für die Dokumentation! ), hier ist ein Copy-Paste aus einem JavaScript-Konsole:

> window["myNamedVar"] = "Hello, World!";
> console.log(myNamedVar);
  "Hello, World!"

Sie würden besser dran, ein Javascript-Objekt zu erstellen, die Sie so etwas wie ein assoziatives Array ist in PHP verwendet verwenden können:

var types = ['hospital','church','library','store'];
var landmarks= {};
for (var i in types) {
    landmarks[types[i]]= new google.maps.Icon();
    landmarks[types[i]].image = "icon" + i + ".png";
} 
alert(landmarks['hospital'].image);  // displays "icon0.png"

Haben Sie wirklich brauchen diese Variablen? Sie können nicht mit diesem tun:

var types = ['hospital','church','library','store'];    
for(var i =0; i < types.length; i += 1) (new google.maps.Icon()).image = "icon" + i + ".png";

Änderungen getan basierend auf Kommentar:

Muster Symbol Name geändert von Symbol + Index + .png + Typ Symbol + .png und die Ergebnisse der Schleife zu speichern.

types = ['hospital','church','library','store'];
var landmarks = {};


// images names are of the form icon + type + .png
function createIcon(type) 
{ 
    var icon = new google.maps.Icon();
    icon.image = "icon" + type + ".png";
    return icon;
}

// mapping of landamarks by type and icon
for (var i = 0, len = types.length; i < len; i++)
{
    landmarks[types[i]] = createIcon(types[i]);
}

ist das Ergebnis: { Krankenhaus: Symbol, Kirche: Symbol, ... }

wo Symbol ist ein Google-Map Symbol, das ein Bild-Attribut hat, die eine Zeichenkette der Form ist "Symbol {type} .png", z.B. iconhostpital.png, iconchurch.png.

die Symbole verwenden, schreiben landmarks.type wo Typ einer der Namen in der Reihe von Arten, z.B. landmarks.hospital.

, wenn die Bild Namen der Form Symbol sind + number + .png, und die Anzahl für jede Art entspricht den Index in dem Array den Anruf CreateIcon ersetzen (Typ [i]) für CreateIcon (i).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top