Страница 1 из 1

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

Добавлено: 19 июн 2011, 22:54
Mavka
В 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. Но тогда придется переписать заменяемую функцию полностью.