JS, передача аргумента в функцию обратного вызова (карты Bing) - PullRequest
0 голосов
/ 04 ноября 2019

Работа с этим примером из Bing Maps V8

Эта строка запускает поиск по карте: geocodeQuery("New York, NY");

Этот фрагмент кода содержит функцию обратного вызова (которая помещаетзначок на карте):

var searchRequest = {
  where: query,
  callback: function (r) {
    //Add the first result to the map and zoom into it.
    if (r && r.results && r.results.length > 0) {
      var pin = new Microsoft.Maps.Pushpin(r.results[0].location);
      map.entities.push(pin);
      map.setView({ bounds: r.results[0].bestView });
    }
  },
  errorCallback: function (e) {
    //If there is an error, alert the user about it.
    alert("No results found.");
  }
};

Если я хочу выполнить несколько поисков, я могу написать:

geocodeQuery("New York, NY");
geocodeQuery("Queens, NY");

Теперь у меня есть 2 контакта на карте.

Следующий шаг: если я хочу пометить контакты, я бы расширил «новый код кнопки»:

var pin = new Microsoft.Maps.Pushpin(r.results[0].location,
{
    title: 'Queens',
    text: '2'
});

Вопрос:

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

1 Ответ

0 голосов
/ 04 ноября 2019

Вам нужно будет добавить аргумент в функцию geocodeQuery (может быть назван title) и использовать его при создании контакта в обратном вызове. Тогда вы можете просто позвонить geocodeQuery("Queens, NY", "Queens")

function geocodeQuery(query, title) {
    //If search manager is not defined, load the search module.
    if (!searchManager) {
        //Create an instance of the search manager and call the geocodeQuery function again.
        Microsoft.Maps.loadModule('Microsoft.Maps.Search', function () {
            searchManager = new Microsoft.Maps.Search.SearchManager(map);
            geocodeQuery(query, title);
        });
    } else {
        var searchRequest = {
            where: query,
            callback: function (r) {
                //Add the first result to the map and zoom into it.
                if (r && r.results && r.results.length > 0) {
                    var pin = new Microsoft.Maps.Pushpin(r.results[0].location, {
                        title: title,
                        text: '2'
                    });
                    map.entities.push(pin);
                    map.setView({ bounds: r.results[0].bestView });
                }
            },
            errorCallback: function (e) {
                //If there is an error, alert the user about it.
                alert("No results found.");
            }
        };
        //Make the geocode request.
        searchManager.geocode(searchRequest);
    }
}
...