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