Этому вопросу уже несколько месяцев, но я заметил, что он остался без ответа. Я предполагаю, что ОП уже нашел способ преодолеть это, но позвольте мне попытаться ответить ради полноты.
Я могу заметить несколько основных проблем в вашем коде выше:
Прежде всего, вы пытаетесь передать массив properties
в функцию setMarkers()
до того, как будет определено properties
. Поэтому setMarkers()
получит undefined
за второй аргумент, поэтому на вашей карте ничего не отображается.
Тогда у вас есть очень распространенная проблема закрытия в этом цикле for in
. Переменные, заключенные в замыкание, совместно используют одну и ту же среду, поэтому к тому моменту, когда вызывается обратный вызов click
из addListener
, цикл завершит свою работу, а переменная i
останется указывающей на последнее значение имел когда закончился цикл.
Кроме того, в литерале массива имеется висящая запятая, которая может вызвать синтаксическую ошибку в некоторых браузерах.
Чтобы решить первую проблему, просто определите массив properties
перед вызовом setMarkers()
:
var properties = [
['106 Ft Washington Avenue',40.8388485,-73.9436015,'Mjg4'],
];
setMarkers(map, properties);
Затем вы можете решить проблему замыкания с помощью еще большего числа замыканий, используя фабрику функций:
function makeClickCallback(buildings, i) {
return function() {
window.location = ('detail?b=' + buildings[i][3]);
};
}
for (var i in buildings) {
// ...
google.maps.event.addListener(marker, 'click',
makeClickCallback(buildings, i);
}
Это может быть довольно сложной темой, если вы не знакомы с тем, как работают замыкания. Вы можете ознакомиться со следующей статьей Mozilla для краткого введения:
Тогда вы можете убедиться, что удалили висячую запятую в литерале массива:
var properties = [
['106 Ft Washington Avenue',40.8388485,-73.9436015,'Mjg4'] // no comma
];
Кроме того, обратите внимание, что поскольку в вашем массиве properties
есть только один элемент, на карте вы получите только один маркер. Я не уверен, были ли удалены другие элементы ради этого примера, но если это не так, просто добавьте больше мест, как это:
var properties = [
['106 Ft Washington Avenue',40.8388485,-73.9436015,'Mjg4'],
['Another Location',50.505050,-75.505050,'Mjg5']
];