[OpenLayers-Dev] Alternative way to define properties in objects

Alexandre Dube adube at mapgears.com
Tue Feb 15 09:29:58 EST 2011


Hi devs,

   I'd like to move a discussion I had on the GeoExt-Users mailing list 
here.  I couldn't find any GeoExt nabble to show the thread.  Is there 
such a thing ?

   *** The original issue ***

   While using the GeoExt.data.WFSCapabilitiesStore, I had to override 
the strategy it creates by default.  In the Reader, it's done as such :

{{{ ###
                 layerOptions = {
                     protocol: new OpenLayers.Protocol.WFS(protocolOptions),
                     strategies: [new OpenLayers.Strategy.Fixed()]
                 };
                 if(this.meta.layerOptions) {
                     Ext.apply(layerOptions, this.meta.layerOptions);
                 }
}}} ###

   That means that we're able to override the layersOptions.strategies 
using the meta.layerOptions, but when we do so, it bugs because the same 
strategy object is then used for all created layers.  To fix that 
problem, I had to hard-code the strategies I wanted instead, which isn't 
a really good long-term solution.

   There could be a way to fix this issue with a fix in OpenLayers.  
Here's some more details :

   *** Proposed solution in OpenLayers ***

   If we could send a hash instead of an instanced object as property 
values, we could then let the constructors create the objects 
accordingly.  That method could be a new way of defining the properties 
without changing the previous method.  Here's a example :

// ### currently ###
var layer = new OpenLayers.Layer.Vector("mylayer", {
     strategies: [new OpenLayers.Strategy.BBOX()]
});

// ### new alternative way, with or without full class name, with and 
without options ###
var layer = new OpenLayers.Layer.Vector("mylayer", {
     strategies: [{"OpenLayers.Strategy.BBOX"}]
});
var layer = new OpenLayers.Layer.Vector("mylayer", {
     strategies: [{"OpenLayers.Strategy.BBOX": {ratio: 1}}]
});
var layer = new OpenLayers.Layer.Vector("mylayer", {
     strategies: [{"BBOX"}]
});
var layer = new OpenLayers.Layer.Vector("mylayer", {
     strategies: [{"BBOX": {ratio: 1}}]
});

That way, we would be able to define non-instanced object properties and 
let the main object constructor taking care of creating the them.  That 
would fix the issue in the GeoExt.data.WFSCapabilitiesStore mentioned above.

Thoughts ?

-- 
Alexandre Dubé
Mapgears
www.mapgears.com



More information about the Dev mailing list