私は Google マップで作業しており、3 つ以上のタイル オーバーレイを作成する必要があります。例:
タイルオーバーレイ
var parkingOptions = { //Parking Overlay
getTileUrl: function(coord, zoom) {
return "/maps/tiles/tilesparking/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
},
tileSize: new google.maps.Size(256, 256)
};
var parkingMapType = new google.maps.ImageMapType(parkingOptions);
ただし、マッピング範囲外のタイルが見つからないことによる 404 エラーを回避するために、私のコードはもう少し複雑です。したがって、各オーバーレイに割り当てられた特定のキーワード(ここでは「駐車場」として指定)が上記のコードに挿入されるループを作成するつもりでした。したがって:
ループの場合
var tileNames = ["base", "parking", "access"];
for (var i = 0; i < tileNames.length; i++) {
//insert Tile Overlay code here
};
ただし、特定の問題が 1 つあります。tileNames 配列から文字列を取得し、それらをタイル オーバーレイ コードの 2 つの変数の初期化に使用する方法が見つかりません。理想的には、次のようなことを達成したいと考えています。
試行 1
var tileNames[1] + "Options" = { //ideally: var parkingOptions = {
//insert remaining code
};
しかし、これは機能しません。また、私は本当に期待していませんでした。これらの完全な文字列を作成して初期化に挿入しようとすることもありません。
試行 2
var newOptions = tileNames[1] + "Options";
var newOptions = {
//insert remaining code
};
したがって、文字列を初期化変数に配置する方法はありますか?
注:回答として、問題に対する独自の代替ソリューションを含めました。動作するはずですが、変数の名前を破棄し、説明のない配列変数に置き換えます。結果のコードでオーバーレイを追加および非表示にする際に頻繁に使用されるため、説明的な変数名を保持したいと思います。
とにかく この質問について...
var tileNames = ["beloit", "parking", "access"];
var mapType = {};
for (var i = 0; i < tileNames.length; i++) {
var tileOptions = {
getTileUrl: function(coord, zoom) {
return "/maps/tiles/tiles" + tileNames[i] + "/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
},
tileSize: new google.maps.Size(256, 256)
};
mapType[tileNames[i]] = new google.maps.ImageMapType(tileOptions);
};
パズルの他の部分である getTileUrl 関数の「tileNames[i]」は未定義です。これは、名前文字列を関数に配置するのではなく、実行時に関数が必要とするためです。ただし、それはここで見つかる新しい質問です: Javascript: Making a variable static when defined a function in a loop?