Я не очень хорошо разбираюсь в js и стараюсь использовать Bing-карту на нашем сайте, но она показывает карту несколько раз и не показывает карту большую часть времени. Ниже приведен фрагмент кода загрузки функции карты, может кто-то, пожалуйста, дайте мне знать, что не так в этой функции, я использую это из другого приложения:
function loadMap(storeData) {
var coordinates = {};
var map;
var stores = storeData.stores;
if( (typeof stores !== 'undefined') && (typeof stores[0].coordinates !== 'undefined') ) {
coordinates.lat = stores[0].coordinates.lat;
coordinates.lng = stores[0].coordinates.lng;
}else {
coordinates.lat = 33.74831008911133;
coordinates.lng = -84.39111328125;
}
map = new Microsoft.Maps.Map($('#bingMap')[0], {
credentials: 'mykey',
liteMode: true,
enableClickableLogo: false,
center: new Microsoft.Maps.Location(coordinates.lat, coordinates.lng)
});
self.center = new Microsoft.Maps.Location(coordinates.lat, coordinates.lng);
map.setView({zoom: 13});
return map;
}
Я пробовал несколько шагов, которые я получил от других запросов stackoverflow, но мне это не помогло :-(
setTimeout(this.loadMap(storeData), 2000); Microsoft.Maps.Events.addHandler(map,'resize')
Проблема заключается в вызове setTimeout
:
Вы видите, setTimeout
получает 2 параметра:
в вашем случае вы использовали setTimeout(this.loadMap(storeData), 2000);
который не передает функцию setTimeout, а результат выполнения. Кроме того, этот код также будет выполнять this.loadMap
немедленно, а не через 2 секунды.
Чтобы решить эту проблему, вы можете просто использовать:
setTimeout(function() { this.loadMap(storeData)}, 2000);
или: (решение @Sysix) setTimeout(this.loadMap.bind(this), 2000, storeData);
setTimeout(this.loadMap.bind(this), 2000, storeData);