Информационное окно Bing Maps не отображается — setMap не является функциональной ошибкой на консоли

Мои карты Bing не загружали информационное окно. У меня есть массив, который создает кнопки для отображенных мест, и ниже приведен код, который я использую. Я добавил сообщение консоли для дисплея, чтобы проверить, правильно ли он вызывается, что он и делает. Мне было интересно, связано ли смещение/привязка с отсутствием отображения информационного окна. Может ли кто-нибудь помочь мне здесь?

    var arrPins = [];
var arrPinCenter = [];
//Generating Pins for multiple locations with Lat,Long
for (var locNum = 0; locNum <= arrLocInfoRec.length - 1; locNum++) {
    try {
           arrLLAdder = arrLocInfoRec[locNum].split("`");
           if (arrLLAdder.length >= 13) {
                 arrPinCenter[locNum] = new Microsoft.Maps.Location(parseFloat(arrLLAdder[11]), parseFloat(arrLLAdder[12]));
                 arrPinCenter[locNum] = new Microsoft.Maps.Location(parseFloat(arrLLAdder[11]), parseFloat(arrLLAdder[12]));
                 arrPins[locNum] = new Microsoft.Maps.Pushpin(
                  arrPinCenter[locNum], {                                                                                                
                 text: arrLLAdder[8] ,                                                                                                                                                                icon: 'https://www.bingmapsportal.com/Content/images/poi_custom.png',                                                                                                    anchor: new Microsoft.Maps.Point(12, 39) 
                                                                                    }
 var adder = arrLLAdder[2] + '\r\n' + arrLLAdder[4] + '\r\n' + arrLLAdder[6] + arrLLAdder[9] + "\r\n" + arrLLAdder[1]
     // Create the infobox for the pushpin
 arrPinInfobox[locNum] = new Microsoft.Maps.Infobox(arrPins[locNum].getLocation(),
      {   width: 350,
          height: 100,
          title: arrLLAdder[5],
          description: adder,
          offset: new Microsoft.Maps.Point(-3,13)`enter code here`
        });
 // Add handler for the pushpin click event.
 Microsoft.Maps.Events.addHandler(arrPins[locNum], 'click', displayInfobox);
    }

 else {
   console.log("Invalid Data: arrLocInfoRec[" + locNum + "] = \"" + arrLocInfoRec[locNum] + "\"");
                        }`enter code here`
                    } catch (e) {
                        console.log(e.message + "\r\n" + arrLocInfoRec[locNum]);
                    }
                }
// Hide the infobox when the map is moved.
// Microsoft.Maps.Events.addHandler(map, 'viewchange', hideInfobox);    
// Add the Push Pins and InfoBox to the map all at once

       if(arrPins.length > 0) {
                  map.entities.push(arrPins); //[locNum]
                  arrPinInfobox.setMap(map);

//I get a console error here for the setMap function 
// see error below
                    //map.entities.push(arrPinInfobox);
                    //map.entities.push(InfoBoxEntity);
                }


            }

Uncaught TypeError: arrPinInfobox.setMap не является функцией в GetMap (68A611D186DE4DC991773CAED323DA31.ashx:135) в Object.Microsoft.Maps.notifyMapReadyForBootstrap (www.bing.com/mapspreview/sdk/mapcontrol?branch=release&callback=GetMap:14) в www .bing.com/rms/SDKPlugin/jc,nj/9ac8b1b9/4153aba0.js?//bu=rms+answers+MapsSD…leLayerMapsTilePrimerSDKMapPointCompressionSDKPluginEndAnonymousEnd:1 на странице www.bing.com/rms/SDKPlugin/jc,nj/9ac8b1b9/4153aba0.js?//bu=rms+answers+MapsSD…//leLayerMapsTilePrimerSDKMapPointCompressionSDKPluginEndAnonymousEnd:1

Я использую приведенный ниже код для отображения информационного окна

            function displayInfobox(e) {
                   //map.entities.push(arrPinInfobox);
                console.log("DisplayBox");
                for(var i in arrPinInfobox)
                    arrPinInfobox[i].setOptions({ visible: true });
                arrPinInfobox[parseInt(e.target.getText()) - 1].setOptions({ visible: true });
            }

person user7416176    schedule 13.01.2017    source источник


Ответы (1)


Добавьте несколько точек останова в свой код и пошагово выполните его. Ваш код немного запутан, но похоже, что к тому времени, когда вы дойдете до строки кода setMap, информационное поле так и не было создано, поскольку оно создается внутри оператора try, и, возможно, оно никогда не было создано.

Тем не менее, я настоятельно рекомендую использовать один информационный блок для повышения производительности. Взгляните на этот пример кода: https://msdn.microsoft.com/en-us/library/mt750274.aspx

person rbrundritt    schedule 13.01.2017