[OpenLayers-Users] SelectFeature control/Feature Handler interaction on programmatic feature selection

Justin Stern jstern81 at gmail.com
Mon Sep 1 18:35:57 EDT 2008


The background: my goal is to make vector features which open a popup
when clicked, or when their name is clicked in a list.  The popup
should close when the features are 'unselected'.  To do this I add a
SelectFeature control, similar to one of the OpenLayers demo examples,
and when I want to open the popup programmatically , I invoke the
'select' method on the SelectFeature control.

The issue: this works well, except for when the very first action is
the user clicking the feature name to open the popup.  In this case,
clicking outside the popup (the map area) does not cause the popup to
close.  It must be closed via the 'x' or by clicking that or another
feature to open a new popup, at which point future programmatically
opened popups behave the same as those from clicking a feature.

I tracked this down to the Handler not being informed of features
selected via the control 'select' method (which makes sense, the
Handler handles mouse events, which calling 'select' is not), which
causes certain checks to fail in the Handler when the user then clicks
outside the popup.  To the Handler nothing appears to be selected, so
it doesn't know to tell the feature control to 'unselect' the feature.

Now I seem to be able to work around this issue by faking out the
Handler when I detect the first programmatic select:

if(!selectFeatureControl.handlers.feature.lastFeature) {
    selectFeatureControl.handlers.feature.lastFeature =
selectFeatureControl.handlers.feature.feature = theFeature;
    selectFeatureControl.handlers.feature.handled = true;
}

But it makes me wonder if my approach is wrong to have to go through
this sort of thing...  Any suggestions?



More information about the Users mailing list