You will need to run your app with an uncompressed openlayers and use a debugger like FireBug or the one built into IE 8 to figure out what is the invalid argument. You may be returning a string value or a negative number, perhaps using parseInt or parseFloat to sanitize the number might help
strokeWidth: "${getStyle}" context: { getStyle: function(feature, attribute) { if (attribute == 'strokeWidth') { var radius = parseFloat(feature.attributes.radius); return !isNaN(radius) ? radius + 2 : 1; } } } Cheers Paul On 2009-09-17, at 3:58 PM, Max Stephan wrote: > > Hey Paul, > > it´s helping to reduce my lines of code for sure :-) But my main > problem > still exists: Whenever I try to get the attribute "radius" (also > tried it > with the strokeWidth-attribute, doesnt´s work either) of the > vectorfeature > to be the radius of it the nice error message "Line: 625 Column: 408, > invalid Argument (OpenLayer.js)" pops up. No matter what I try > (defining > context, parsing the attribute directly to Int in the stylemap or > even when > I add the attribute to the vector), the problem remains the same. > > greets > Max Stephan > > > 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 >> >> > > -- > View this message in context: > http://n2.nabble.com/Problem-with-styling-vectorfeatures-depending-on-their-attributes-tp3663197p3664933.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