Клуб API Карт

Поиск по своим объектам. api 2.1β

Артём Ершов
18 февраля 2014, 15:31

В версии api 2.0 для поиска по своим объектам на карте и использовал пример из песочницы.  

function CustomSearchProvider(points) {
    this.points = points;
}
// Провайдер ищет по полю text стандартным методом String.ptototype.indexOf.
CustomSearchProvider.prototype.geocode = function (request, options) {
    var promise = new ymaps.util.Promise(),
        geoObjects = new ymaps.GeoObjectArray(),
        // Сколько результатов нужно пропустить.
        offset = options.skip || 0,
        // Количество возвращаемых результатов.
        limit = options.results || 20;
    this.points
        // Ищем в свойстве text каждого элемента массива.
        .filter(function (point) {
            return point.text.toLowerCase().indexOf(request.toLowerCase()) != -1;
        })
        // При формировании ответа можно учитывать offset и limit.
        .splice(offset, limit)
        // Добавляем точки в результирующую коллекцию.
        .forEach(function (point) {
            var coords = point.coords,
                text = point.text;
            geoObjects.add(new ymaps.Placemark(coords, {
                name: text + ' name',
                description: text + ' description',
                balloonContentBody: '<p>' + text + '</p>',
                boundedBy: [coords, coords]
            }));
        });
    promise.resolve({
        // Геообъекты поисковой выдачи.
        geoObjects: geoObjects,
        // Метаинформация ответа.
        metaData: {
            geocoder: {
                // Строка обработанного запроса.
                request: request,
                // Количество найденных результатов.
                found: geoObjects.getLength(),
                // Количество возвращенных результатов.
                results: limit,
                // Количество пропущенных результатов.
                skip: offset
            }
        }
    });
    // Возвращаем объект-обещание.
    return promise;
};

http://api.yandex.ru/maps/jsbox/custom_search 


Сейчас переписываю свой проект под новую апи. Со всем остальным пока разобрался (даже с кластерами оказалось всё не так страшно, как боялся), а вот на провайдере поиска застопорился. Помогите советом дельным или вдруг кодом рабочим =)

4 комментария
Подписаться на комментарии к посту
Обязательно добавим обновленный пример в песочницу. Пока вот:
http://jsfiddle.net/zloylos/L7pQX/
Артём Ершов
18 февраля 2014, 17:01

Огромное спасибо!

Артём Ершов
19 февраля 2014, 11:34

А возможно ли реализовать здесь "показать ещё", как в стандартном поисковом провайдере? В api 2.0 у самого SearchControl было свойство resultsPerPage. В бете это ещё не реализовано или теперь провайдер отвечает за пагинацию? судя по тому что при подключении стандартного провайдера эта кнопка есть.

Или я просто не внимательно документацию читаю?(

А как будет выглядеть код если обекты вызываются с базы данных?