GetFeature - индикатор загрузки

Решенные задачи, первая запись - описание решения.
Ответить
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

GetFeature - индикатор загрузки

Сообщение Mavka » 19 июн 2011, 22:54

В javascript можно как добавлять новые методы к классу, так и заменять существующие на новые. Причем изменения коснутся всех экземпляров класса. (Подробнее см. здесь.) Так же можно подменить метод для конкретного объекта, а на классе это не отразится.

Рассмотрим типовую задачу - отлов события начала загрузки данных в протоколе WFS.

Пусть имеется контроллер GetFeature, который по щелчку мышки на карте запрашивает по WFS объекты, попавшие в район щелчка:

Код: Выделить всё

var ctrlGetFeature = new OpenLayers.Control.GetFeature({
    protocol: new OpenLayers.Protocol.WFS({
        version: '1.0.0',
        ...
    }),
    box: true
}); 
Поскольку процедура долгая, то хотелось бы проинформировать пользователя (показать индикатор, песочные часы и т.п.) о начале загрузке и об окончании. Завершение процедуры можно узнать по событию "featureselected":

Код: Выделить всё

ctrlGetFeature.events.register("featureselected", this, function () {
    alert("Приехали");
}); 
А вот начало поймать сложнее. В протоколе OpenLayers.Protocol.WFS в методе read не предусмотрена активация событий. (В базовом классе OpenLayers.Request их также нет.) Поэтому переопределим в объекте ctrlGetFeature метод request на новый и потом вызовем настоящий из класса:

Код: Выделить всё

ctrlGetFeature.request = function(bounds, options) {
    alert("Трогай, сказала Кэт...");
    OpenLayers.Control.GetFeature.prototype.request.call(this, bounds, options);
} 
Как вариант, можно было переопределить метод для всего класса GetFeature или WFS. Но тогда придется переписать заменяемую функцию полностью.
лангольеры под окном жрали время ом-ном-ном

Ответить

Вернуться в «Рецепты»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей