2016-03-17 5 views
5

Я знаю, что это распространенный вопрос, и я новичок в JS, но я полностью зациклен даже после поиска в StackOverflow в течение нескольких часов.Добавление свойств в глобальные объекты

Я использую API Карт Google и хочу отслеживать мои маркеры по ассоциации с идентификатором. Так что я var pinArray = new Object() как глобальную переменную, и добавить маркеры, как это:

function CreateMarkers (data){    
     data.forEach(function(store) {   
      <!-- CREATE MAP MARKER --> 
      var mapLat = store.latitude; 
      var mapLong = store.longitude; 
      var mapLatLng = { lat: parseFloat(mapLat), lng: parseFloat(mapLong) };      
      var marker = new google.maps.Marker({ 
       position: mapLatLng, 
       title: store.name,   
       icon: { 
        path: google.maps.SymbolPath.CIRCLE, 
        scale: 8.5, 
        fillColor: 'Green', 
        fillOpacity: 0.8, 
        strokeWeight: 0.6, 
       },    
       zIndex: 0 
      }); 
      cluster.addMarker(marker); 
      var key = store.Id; 
      pinArray['${key}'] = marker;       
     }) 
    } 

Где cluster является var cluster = new MarkerClusterer(map);.

Когда я пытаюсь сделать console.log(pinArray); назад за пределами функции, я получаю пустой объект: Object {}. Я также пробовал не использовать строчную интерполяцию, например pinArray[store.Id] = marker;, но получаю ту же проблему.

Мне нужно сохранить эту глобальную связь между выводами и идентификаторами, потому что мне нужно ссылаться и обновлять маркеры по их идентификатору в других функциях. Или, по крайней мере, я думаю, что знаю, я открыт для других способов сделать это. Помощь очень ценится; заранее спасибо.

+1

Просто FYI - '' синтаксис для комментария в HTML - JavaScript комментарии '// как this' – tymeJV

+0

@tymeJV Ой, спасибо. Я хотел вернуться и изменить их. – Mason

ответ

2

Обычно, когда я сделал что-то подобное в прошлом, я буду использовать стандартный яваскрипт массива вместо опознали объект:

var pinArray = []; 

Затем используйте толчок, чтобы добавить маркеры к нему, как вы перейти:

pinArray.push(Marker); 

При создании чеки вы можете включить ваш ключ в его определении свойства:

var marker = new google.maps.Marker({ 
      position: mapLatLng, 
      title: store.name,   
      icon: { 
       path: google.maps.SymbolPath.CIRCLE, 
       scale: 8.5, 
       fillColor: 'Green', 
       fillOpacity: 0.8, 
       strokeWeight: 0.6, 
      },    
      zIndex: 0, 
      key: store.Id 
     }); 

, и вы можете написать простую функцию поиска цикла, чтобы найти отдельный маркер карты, если вам нужно потянуть их по идентификатору. Что-то вроде:

function GetMarkerByKey(key) { 
    var i = 0; 
    while (pinArray[i].key != key) {i++} 
    return pinArray[i]; 
} 

Кроме того, если вы используете его в динамическом обработчике события мыши или парить вы можете использовать это свойство для определения того, какие маркера они активизируют его.

~~~ Редактированное, чтобы исправить ошибку синтаксиса ~~~

+0

Это хорошая идея, я не знал, что могу просто добавить все свойства, которые я хотел отобразить на карте. Я все еще привык к строго типизированному .NET! – Mason

+0

Кстати, 'key = store.Id' должен быть' key: store.Id'! – Mason

+0

А, я тоже разработчик .NET :) Я знаю, что вы имеете в виду. Javascript - это такой мир, но вы привыкаете к нему через некоторое время. Извините, мой сценарий не был совершенным, я на самом деле не пытался запустить его в браузере, я просто написал его прямо в поле ответа «Переполнение стека» ха-ха. Я был бы довольно удивлен, если бы эта функция поиска работала немедленно. – Jrud

2

var pinArray присваивает переменной в пределах объема функции она определена. Самый безопасный способ гарантировать, что вы определяете переменную как глобальную, независимо от того, где вы находитесь внутри функции, - это присвоить ее window.

window.pinArray = new Object(); 
+0

IDK, если это его проблема или нет, но это довольно аккуратный трюк. +1 – Jrud

+0

Спасибо за подсказку! Я думаю, что я собираюсь использовать стандартный метод массива, указанный ниже, но это здорово знать для действительно глобальных переменных. Благодаря! – Mason

Смежные вопросы