Thanks for commenting, Andreas ... On 21-Jun-09, at 12:29 PM, Andreas Hocevar wrote:
> Hi Paul, > > On Fri, Jun 19, 2009 at 5:14 PM, Paul > Spencer<[email protected]> wrote: >> In the context of calling functions to compute styles for features >> using the ${functionName} syntax, it would be very useful for me if >> the property being computed was passed to functionName() in addition >> to the feature itself. I've tested this locally by modifying >> createLiterals to pass an array with [feature,i] (where i is the >> property name) and createLiteral to replace feature with args, which >> is passed to String.format as the third value. This works perfectly >> for me. The only other use of createLiteral is in Rule, which does >> not use the third argument at all. >> >> I would like to propose this change as a patch but I am undecided if >> the appropriate change is to pass an array as the third argument to >> createLiteral or to test in createLiteral if the third argument is an >> array or not and modify it appropriately for passing on to >> String.format ... >> >> Currently, I am using this: >> >> OpenLayers.Style.createLiteral = function(value, context, args) { >> if (typeof value == "string" && value.indexOf("${") != -1) { >> value = OpenLayers.String.format(value, context, args); >> value = (isNaN(value) || !value) ? value : parseFloat(value); >> } >> return value; >> }; > > What about > > OpenLayers.Style.createLiteral = function(value, context, feature, > property) { > if (typeof value == "string" && value.indexOf("${") != -1) { > value = OpenLayers.String.format(value, context, [feature, > property]); > value = (isNaN(value) || !value) ? value : parseFloat(value); > } > return value; > }; > > Then you could have > > createLiterals: function(style, feature) { > var context = this.context || feature.attributes || > feature.data; > > for (var i in this.propertyStyles) { > style[i] = OpenLayers.Style.createLiteral(style[i], > context, feature, i); > } > return style; > }, > > and would not have to worry about API changes. I thought of this and then decided on passing an array in the (perhaps unlikely) event that someone else thought of a need for other arguments they would like passed through createLiteral to String.format and beyond. If that won't happen, then passing a fourth argument is probably the safer change (even though it is not an APIMethod)feat. I will propose your suggestion as the patch in trac with a comment about my alternative and the possible reasons to implement one over the other. I'll add it to http://trac.openlayers.org/ticket/2146 which proposes to modify createLiterals to combine the context, attributes and data. > > Regards, > Andreas. > __________________________________________ Paul Spencer Chief Technology Officer DM Solutions Group Inc http://research.dmsolutions.ca/ _______________________________________________ Dev mailing list [email protected] http://openlayers.org/mailman/listinfo/dev
