загрузка карты Bing только после изменения размера окна

1

Я не очень хорошо разбираюсь в 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')
  • 0
    setTimeout(this.loadMap.bind(this), 2000, storeData);
  • 0
    Это сработало, но теперь выводы уходят, в этой последовательности я вызываю эти функции, я делаю что-то не так this.bingMap = this.loadMap (storeData); this.loadPins (this.bingMap, storeData, true); setTimeout (this.loadMap.bind (this), 2000, storeData);
Теги:
bing-maps

1 ответ

0
Лучший ответ

Проблема заключается в вызове setTimeout:

Вы видите, setTimeout получает 2 параметра:

  1. Функция для выполнения
  2. Тайм-аут в мс

в вашем случае вы использовали setTimeout(this.loadMap(storeData), 2000); который не передает функцию setTimeout, а результат выполнения. Кроме того, этот код также будет выполнять this.loadMap немедленно, а не через 2 секунды.

Чтобы решить эту проблему, вы можете просто использовать:

setTimeout(function() { this.loadMap(storeData)}, 2000);

или: (решение @Sysix) setTimeout(this.loadMap.bind(this), 2000, storeData);

  • 0
    Это сработало, но теперь выводы уходят, в этой последовательности я вызываю эти функции, я делаю что-то не так this.bingMap = this.loadMap (storeData); this.loadPins (this.bingMap, storeData, true); setTimeout (this.loadMap.bind (this), 2000, storeData);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню