OpenLayers: Определение свойств объекта по умолчанию

Решенные задачи, первая запись - описание решения.
Ответить
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

OpenLayers: Определение свойств объекта по умолчанию

Сообщение Denis Rykov » 19 янв 2011, 13:27

Часто приходится создавать множество однотипных объектов с одинаковыми свойствами, например слоёв. В этом случае оказывается удобным передавать в качестве параметра - заранее подготовленный объект с описанными свойствами. Например:

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

//Описание объекта с параметрами
var defaultWFSProperty = {
    url: "http://gis-lab.info/wfs.cgi?",
    featureNS: "http://gis-lab.info",
    featureType: "border",
    geometryName: "wkb_geometry",
    outputFormat: "application/json" ,
    readFormat: new OpenLayers.Format.GeoJSON()
};

//Создание слоя
var border = new OpenLayers.Layer.Vector("Границы", {
    strategies: [new OpenLayers.Strategy.BBOX()],
    protocol: new OpenLayers.Protocol.WFS(defaultWFSProperty)
});
При использовании такого подхода, значительно сокращается количество строк кода и повышается его читаемость. Но что делать, если наряду с одинаковыми свойствами, каждый слой обладает некоторыми уникальными? Предположим, что это будет свойство featureType. В этом случае убираем его из объекта с дефолтными свойствами:

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

//Описание объекта с параметрами
var defaultWFSProperty = {
    url: "http://gis-lab.info/wfs.cgi?",
    featureNS: "http://gis-lab.info",
    //featureType: "border",
    geometryName: "wkb_geometry",
    outputFormat: "application/json" ,
    readFormat: new OpenLayers.Format.GeoJSON()
};
И добавляем нужное(-ые) свойство(-а) в момент создания нового объекта:

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

var border = new OpenLayers.Layer.Vector("Границы", {
        strategies: [new OpenLayers.Strategy.BBOX()],
        protocol: new OpenLayers.Protocol.WFS(
           OpenLayers.Util.applyDefaults({featureType: "border"},defaultWFSProperty)
        )}
);
Вместо метода OpenLayers.Util.applyDefaults() можно использовать аналог - OpenLayers.Util.extend().
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

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

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

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