[OpenLayers-Dev] using custom renderer on Layer.Vector
Bart van den Eijnden
bartvde at osgis.nl
Thu Jun 10 07:06:09 EDT 2010
Thanks Chris, this is exactly the kind of feedback I was looking for. I'll open up an enhancement ticket with your suggestion.
Best regards,
Bart
On Jun 10, 2010, at 12:59 PM, <christopher.schmidt at nokia.com> <christopher.schmidt at nokia.com> wrote:
>
> On Jun 10, 2010, at 3:32 AM, ext Bart van den Eijnden wrote:
>
>> Hi list,
>>
>> I am trying to use a custom renderer for a Vector Layer. However, if I interpret the code correctly, there is an issue there right now. Hopefully somebody can clarify if I am doing something wrong.
>
> Bart:
>
> I would say that this is not the right way to go about it. Instead,
> the right thing to do is to pass in a renderers array like so:
>
> Layer.Vector("", {
> renderers: [Geozet.Renderer.Anchor]
> })
>
> Setting 'renderers' in a Vector layer's option is documented (in the
> form of an example) and is the only way I had originally considered
> allowing users to control the renderer code; this was to ensure that
> by default, OpenLayers would check things like the .supported()
> call, etc.
>
> However, the current code requires renderers to be in OpenLayers.Renderer
> namespace, so clearly this won't work for you.
>
> While the suggestion you had is not unreasonable, my first suggestion
> would be to change the .renderers array to support storing
> actual classnames. The reason that we don't do that in *general* is
> because we wanted to be able to allow users to exclude renderers,
> and not have their OL file break, which would not work with actual
> classnames. However, there's no reason we can't check if the passed
> in thing is a string or an object, and do the right thing either way.
>
> If you look in the assignRenderer function, you can see that the
> renderer is instantiated with a div and rendererOptions.
>
> In reality, there's no reason not to pursue both of these -- however,
> if I were mucking about with making things APIProperties, the .renderers
> array is the one that I would go for first.
>
> -- Chris
>
>> I am defining my layer in the following way:
>>
>> vectorLayer = new OpenLayers.Layer.Vector("Bekendmakingen", {
>> styleMap: new OpenLayers.StyleMap({'default':{
>> cssClass: "${category}"
>> }}),
>> renderer: new Geozet.Renderer.Anchor(),
>> strategies: [new Geozet.Strategy.PrintList()]
>> });
>>
>> However, the constructor of the renderer normally gets the root div as the first argument, but since the vectorLayer has not yet been rendered, I cannot assign it as yet.
>>
>> If I look in the Vector.js code I see in the initialize function:
>>
>> OpenLayers.Layer.prototype.initialize.apply(this, arguments);
>>
>> // allow user-set renderer, otherwise assign one
>> if (!this.renderer || !this.renderer.supported()) {
>> this.assignRenderer();
>> }
>>
>> So after the prototype initialize has been called, this.div is there, and I need to "assign' it to my custom renderer.
>>
>> So I would expect:
>>
>> Renderer to have a setContainer function, and the constructor of the Vector layer to use that function if a user-set renderer has been used.
>>
>> TIA.
>>
>> Best regards,
>> Bart
>> _______________________________________________
>> Dev mailing list
>> Dev at openlayers.org
>> http://openlayers.org/mailman/listinfo/dev
>
> Regards,
> --
> Christopher Schmidt
> Nokia
>
>
More information about the Dev
mailing list