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

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

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

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

//Описание объекта с параметрами
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().