2015-03-17 7 views
0

У меня возникли проблемы с получением инфобоксами для API-интерфейса Bing для открытия на клике извне карты.Onclick infobox - bing map api

Вот функция инфобокса шоу и функция для создания самого штыря/инфобокса:

function displayInfobox(e) { 
pinInfobox.setOptions({ 
title: e.target.Title, 
description: e.target.Description, 
visible: true, 
offset: new Microsoft.Maps.Point(0, 25) 
}); 

pinInfobox.setLocation(e.target.getLocation()); 
} 

function hideInfobox(e) { 
pinInfobox.setOptions({ 
visible: false 
}); 
} 

function displayPinsOnMap(results) { 
// Creates a collection to store multiple pins 
var pins = new Microsoft.Maps.EntityCollection(); 

//Create the info box for pushpin 
var infoboxOptions = {width: 260, height:160}; 
pinInfobox = new Microsoft.Maps.Infobox(new Microsoft.Maps.Location(0, 0), infoboxOptions); 
infoboxLayer.push(pinInfobox); 

// Create Pins 
for (var i = 0; i < results.length; i++) { 
//pushpin location 
var position = new Microsoft.Maps.Location(results[i]["Lat"], results[i]["Lon"]); 
//Create the pin 
if(results[i]["DNC"] == 'DNC') { 
var sppins = {htmlContent:"<img src='badsp.png' height='32px'> " }; 
} else { 
var sppins = {htmlContent:"<img src='sppin.png' height='32px'> " }; 
} 
var pin = new Microsoft.Maps.Pushpin(position, sppins); 
pin.Title = results[i]["Business Name"]; 
pin.Description =results[i]["Address"] + "<br>" + 
    results[i]["City"] + ", " + 
    results[i]["StateListing"] + "<br>" + 
    results[i]["Phone"] + 
    "<br>Fax: " + results[i]["Fax"] + 
    "<br>Email: " + results[i]["Email"]; 

Microsoft.Maps.Events.addHandler(pin, 'click', displayInfobox); 

function pinclick(i) { 
Microsoft.Maps.Events.addHandler(results[i], 'click'); 
} 

//Add pin to the map 
map.entities.push(pin); 
} 

//hide box on map move 
Microsoft.Maps.Events.addHandler(map, 'viewchange', hideInfobox); 


//add pins/infobox 
map.entities.push(pinInfobox); 
} 

У меня есть список элементов, вытащил из файла JSON и отображается на карте. Каждый элемент создает булавку и информационное окно, а также в таблице, расположенной сбоку от карты. То, что мне нужно, это щелкнуть имя компании из таблицы, в которой я нуждаюсь, чтобы открыть инфобокс, связанный с этой компанией. Вот как я это делал в прошлом с API Google - это, похоже, не работает так же для Bing (да, я должен использовать bing).

"<td>"+'<a href="#" onclick="javascript:displayInfobox(' + (i) + ');">' + results[i]["Business Name"] +'<\/a>' + "</td>" 

ответ

0

Похоже, что вы скопировали функцию displayInfobox из некоторого кода, который ожидает быть trigerred, когда кто-то нажимает на булавку, потому что функция имеет следующий код:

pinInfobox.setLocation (e.target.getLocation());

Метод getLocation() существует в объекте PushPin-объекта Bing Maps, но, очевидно, не на вашем, поэтому он будет терпеть неудачу, когда попадет в эту строку (вы используете инструменты для отладки браузеров правильно?). Вам нужно будет изменить эту строку, чтобы она откуда-то отображала местоположение инфобокса, либо с помощью функции lat lon, либо с помощью какого-то атрибута, и для создания нового объекта местоположения Bing Maps, используя эти или путем прокрутки всех контактов на на карте, чтобы найти тот, который соответствует вашему в некотором роде

+0

ах вы знаете, я не думал об этом. Это имеет смысл. Спасибо за помощь! – Aaron

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