Hey Paul, I had totally forgotten about this ticket. I combined the 2nd patch with the test from the 1st patch and uploaded a new patch that you can commit.
Thanks for that contribution, it will make styling easier for sure. Regards, Andreas. Paul Spencer wrote: > http://trac.openlayers.org/ticket/2146 may help, I filed this a while > back with a patch to make it possible to use a context and attribute > map. This lets you use ${} for feature styling from attributes and > methods in a context:{} at the same time, reducing the perceived > overhead of adding a function for every attribute you want to map. At > the same time, the patch also modifies what is passed to a context > function to include the name of the attribute being calculated, which > means you can use a single function to handle multiple attributes. > > This means you can do something like this contrived example: > > new StyleMap({ > default: { > fillColor: "${fillColor}", // should come from feature.attributes > strokeWidth: "${getStyle}", // should come from getStyle > function, +2 on attribute value > strokeColor: "${getStyle}" // should come from getStyle function, > just strokeColor attribute though. > }, > context: { > getStyle: function(feature, attribute) { > if (attribute == 'strokeWidth') { > return feature.attributes.strokeWidth + 2; > } else { > return feature.attributes[attribute]; > } > } > }); > > Not sure if this is useful for you. > > Cheers > > Paul > > > On 2009-09-17, at 10:19 AM, Max Stephan wrote: > > >> Hi Andreas, >> >> Thank you for that hint. I already found that out to but it doesn´t >> help me >> with solving my problem. I prefer to avoid using the context because >> of >> this. Any other ideas on this? >> >> greets >> Max Stephan >> >> Andreas Hocevar-2 wrote: >> >>> Max Stephan wrote: >>> >>>> Hi list, >>>> >>>> I have a vectorlayer to which the user can add features and modify >>>> those >>>> features. The user can change the attributes for the features like >>>> fillColor, strokeColor etc. in a form. A javascript-method is >>>> executed by >>>> a >>>> button-click and saves those attributes as vectorattributes (e.g. >>>> feature.attributes.fillColor). >>>> >>>> In the styleMap I´m reading those values from the vectorattributes >>>> to >>>> change >>>> the styling. The stylemap-Code looks like this: >>>> var pointStyleMap = new OpenLayers.StyleMap({ >>>> "default": new OpenLayers.Style({ >>>> fillColor: "${fillColor}", >>>> fillOpacity: 0.5, >>>> strokeColor: "${strokeColor}", >>>> strokeWidth: "${strokeWidth}", >>>> pointRadius: 10, >>>> graphicZIndex: "${graphicZIndex}" >>>> } >>>> ), >>>> "select": new OpenLayers.Style({ >>>> pointRadius: 10, >>>> strokeColor: '#FF3333', >>>> strokeWidth: "${strokeWidth}" >>>> } >>>> ) >>>> });This works so far. But now I want to add 2 to the strokeWidth >>>> when the >>>> feature is selected, so I tried it like this: >>>> strokeWidth: "${strokeWidth}" + 2The effect is that the 2 is only >>>> appended >>>> (the code seems to interprete strokeWidth as a String although I >>>> parsed >>>> it >>>> to an Int via parseInt(), e.g. for a strokeWidth of 2 I get 22 as a >>>> result). >>>> It´s possible to solve this problem by defining a context for the >>>> style >>>> but >>>> in my opinion that´s a little overkill for such a simple task. >>>> {context: >>>> {strokeWidth: function (feature){return >>>> (feature.attributes.strokeWidth >>>> + >>>> 2)}} >>>> }Now I want to get the pointRadius from the attributes but no matter >>>> which >>>> method I try, it always ends in the error message: "Line: 625 >>>> Column: >>>> 408, >>>> invalid Argument (OpenLayer.js)". Also tried to parse it to an Int >>>> again >>>> directly in the styleMap .. no effect. >>>> I have to use IE for this project so no further debug information is >>>> available (I´m also not able to install IE8 with it´s debugging >>>> features >>>> due >>>> to limited admin rights at my workstation). >>>> >>>> Any idea how I could solve this problem? >>>> >>>> >>> As soon as you define a context, feature.attributes will no longer be >>> what is available in the template. So you should define your context >>> like this: >>> >>> context: { >>> strokeWidth: function(feature){...}, >>> strokeColor: function(feature){...}, >>> fillColor: function(feature){...}, >>> graphicZIndex: function(feature){...}, >>> pointRadius: function(feature){...} >>> } >>> >>> Regards, >>> Andreas. >>> >>> >>>> Thx in advance >>>> Max Stephan >>>> >>>> >>>> >>> -- >>> Andreas Hocevar >>> OpenGeo - http://opengeo.org/ >>> Expert service straight from the developers. >>> >>> _______________________________________________ >>> Users mailing list >>> Users@openlayers.org >>> http://openlayers.org/mailman/listinfo/users >>> >>> >>> >> -- >> View this message in context: >> http://n2.nabble.com/Problem-with-styling-vectorfeatures-depending-on-their-attributes-tp3663197p3663407.html >> Sent from the OpenLayers Users mailing list archive at Nabble.com. >> _______________________________________________ >> Users mailing list >> Users@openlayers.org >> http://openlayers.org/mailman/listinfo/users >> > > _______________________________________________ > Users mailing list > Users@openlayers.org > http://openlayers.org/mailman/listinfo/users > -- Andreas Hocevar OpenGeo - http://opengeo.org/ Expert service straight from the developers. _______________________________________________ Users mailing list Users@openlayers.org http://openlayers.org/mailman/listinfo/users