Виджет для jquery.ui, базирует на стандартном автокомплите.
Автоматический поиск данных через Google Places, фильтрация и группировка результатов. Также есть возможность загрузки полной информации о выбранном месте.
Необходимо помимо jquery.ui
подключить underscore и google maps with places service
.
sources
- дополнительный источник данныхloadDetails
-true
илиfalse
, если значение истинно, то по выбору места будет загружена дополнительная информация о нем, по умолчанию вtrue
ignoreUngrouped
- игнорирование данных, которые не вошли в не одну из групп, по умолчанию вtrue
ungroupLabel
- метка для данных без группыungroupClass
- дополнительный класс для элемента группы не сгруппированных данныхgroups
- массив описывающий группы на которые будут поделены данные, каждая группа описывается следующими полями:label
- Текст который будет выводится в группеclass
- Добавочный классtypes
- массив типов Google Places, либо типы пользовательских данных.
bounds
, location
, radius
, types
.
select
- тыкdetailsReceived
- срабатывает при получении полной информации о месте, для пользовательских данных просто возвращается, то что было передано, возвращаемые параметры:event
,google places result
,selected item
detailsFailed
- при ошибке загрузки дополнительных данных, возвращаемые параметры: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);
}
}
});