Виджет для jquery.ui, базирует на стандартном автокомплите.
Автоматический поиск данных через Google Places, фильтрация и группировка результатов. Также есть возможность загрузки полной информации о выбранном месте.
Необходимо помимо jquery.ui подключить underscore и google maps with places service.
sources- дополнительный источник данныхloadDetails-trueилиfalse, если значение истинно, то по выбору места будет загружена дополнительная информация о нем, по умолчанию вtrueignoreUngrouped- игнорирование данных, которые не вошли в не одну из групп, по умолчанию вtrueungroupLabel- метка для данных без группыungroupClass- дополнительный класс для элемента группы не сгруппированных данныхgroups- массив описывающий группы на которые будут поделены данные, каждая группа описывается следующими полями:label- Текст который будет выводится в группеclass- Добавочный классtypes- массив типов Google Places, либо типы пользовательских данных.
bounds, location, radius, types.
select- тыкdetailsReceived- срабатывает при получении полной информации о месте, для пользовательских данных просто возвращается, то что было передано, возвращаемые параметры:event,google places result,selected itemdetailsFailed- при ошибке загрузки дополнительных данных, возвращаемые параметры:event,google places result,selected item
Так как виджет основан на нем доступны все свойства, методы и события базового автокомлита.
$( selector ).geocomplite({
minLength: 2,
autoFocus: true,
types: ['establishment', 'geocode'],
groups: [
{ label: "Области (Субъекты)", class: "district_mod", types: ["administrative_area_level_1"] },
{ label: "Города", class: "city_mod", types: ["locality"] },
{ label: "Районы города", class: "district_mod", types: ["sublocality"] },
{ label: "Улицы", class: "street_mod", types: ["route"] },
{ label: "Метро", class: "subway_mod", types: ["metro"] },
{ label: "Достопримечательности", class: "establishment_mod", types: ["establishment"] }
],
source: function(request, response) {
var stations = getMetroStations(request);
response(stations);
},
detailsReceived: function(event, result, item) {
if (result.metro) {
addMetro(result);
}
else {
addPlace(result);
}
}
});