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@openlayers.org > http://openlayers.org/mailman/listinfo/dev Regards, -- Christopher Schmidt Nokia _______________________________________________ Dev mailing list Dev@openlayers.org http://openlayers.org/mailman/listinfo/dev