OpenLayers: Определение свойств объекта по умолчанию
Добавлено: 19 янв 2011, 13:27
				
				Часто приходится создавать множество однотипных объектов с одинаковыми свойствами, например слоёв. В этом случае оказывается удобным передавать в качестве параметра - заранее подготовленный объект с описанными свойствами. Например:
При использовании такого подхода, значительно сокращается количество строк кода и повышается его читаемость. Но что делать, если наряду с одинаковыми свойствами, каждый слой обладает некоторыми уникальными? Предположим, что это будет свойство featureType. В этом случае убираем его из объекта с дефолтными свойствами:
И добавляем нужное(-ые) свойство(-а) в момент создания нового объекта:
Вместо метода OpenLayers.Util.applyDefaults() можно использовать аналог - OpenLayers.Util.extend().
			Код: Выделить всё
//Описание объекта с параметрами
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)
});
Код: Выделить всё
//Описание объекта с параметрами
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)
        )}
);