[OpenLayers-Dev] popups and non-base layers not working when re-init'ing map in same div

Andreas Hocevar ahocevar at opengeo.org
Fri Oct 22 03:01:14 EDT 2010


Hi,

On Oct 22, 2010, at 03:49 , crb wrote:

> We have a .NET app using OL 2.9.1 and it has a "results" map that is invoked
> when the user clicks on a button in a results page. The map is loaded in a
> div that's inside a .NET control (the div is pretty much the only thing in
> the control). Whenever the user does a search in the app and gets results,
> if they invoke the results map then the app first does a callback to get all
> the locations in the result set and passes those (in JSON) to the results
> map.  The results map then has just three layers (a base streets layer, a
> base imagery layer, and a vector layer with the locations) and a select
> control for a popup on the vector layer.  It creates a vector layer from the
> locations JSON and zooms to the extent that encompasses those locations. 
> 
> Everything works fine the first time the user invokes the results map, but
> for subsequent invokations only the streets base layer works:  the popup
> doesn't work, and the extent for the imagery base layer goes to a default
> extent (and not all tiles are rendered).
> 
> I've tried deleting the variable that contains the results map as follows:
> 
> 
> if (typeof(myResultsMap) != "undefined") {

   myResultsMap.destroy();

>   delete myResultsMap;
> }
> 
> myResultsMap = new ResultsMap(initSettings, "MapSearchResultsControl",
> mapLocs);

Does ResultsMap inherit from OpenLayers.Map? If not, then you have to make sure that the ResultsMap's destroy method also destroys the OpenLayers.Map instance.

Regards,
Andreas.


> 
> // where initSettings are JSON map setting results from one callback and
> mapLocs are location details from another callback, and
> MapSearchResultsControl is the div within the .NET control
> 
> 
> When I step through the code I clearly see that the myResultsMap variable is
> undefined before instantiating a new ResultsMap class, but the behaviour is
> no different.  The init for the ResultsMap class looks like this:
> 
> 
> ResultsMap = OpenLayers.Class(null,
> {
>    rm: null,
>    map: null,
>    mapProjection: null,
>    displayProjection: null,
>    initSettings: null,
>    mapDiv: null,
>    mapLocs: null,
>    locsLayerName: null,
>    locsLayer: null,
> 
>    initialize: function (initSettings, mapDiv, mapLocs) {
>        rm = this; // needed to workaround fact that 'this' can change scope
> within the class because of callback handlers
>        rm.mapDiv = mapDiv;
>        rm.initSettings = initSettings;
>        rm.mapLocs = mapLocs;
>        . . .
>        var mapOptions = . . .
>        . . .
>        rm.map = new OpenLayers.Map(rm.mapDiv, mapOptions);
>    }
> . . .
> }
> 
> 
> Am I doing something inherently wrong in re-initializing a map within the
> same div multiple times?
> 
> -- 
> View this message in context: http://osgeo-org.1803224.n2.nabble.com/popups-and-non-base-layers-not-working-when-re-init-ing-map-in-same-div-tp5661031p5661031.html
> Sent from the OpenLayers Dev mailing list archive at Nabble.com.
> _______________________________________________
> Dev mailing list
> Dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/openlayers-dev

-- 
Andreas Hocevar
OpenGeo - http://opengeo.org/
Expert service straight from the developers.



More information about the Dev mailing list