<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: persist basemap across maps within browser session in ArcGIS JavaScript Maps SDK Questions</title>
    <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140258#M13016</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Kelly,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for the Bing Maps stuff... I meant to do it and something went wrong... anyway, done now.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As for your code, how is it different from what I am doing? I too am listening to the "onLoad" event and setting the basemap. Ok, I read it from a cookie using dojo, but otherwise, this seems to be the same code. Am I missing something?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it worth mentioning that we are still using v3.1?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The issue is that, from my experiments, the gallery always selects the first basemap when it loads. So, in my code, since I want to persist the basemap selection for subsequent pages, it overwrites the cookie with that first basemap.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am tempted to just "skip" the first selection. However, it will start loading the first basemap (whatever that is) and then will switch to the basemap our customer actually wants to use.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IS there a way to have the gallery load but not select a basemap?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Eric.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 05 Mar 2013 18:56:27 GMT</pubDate>
    <dc:creator>ericliprandi</dc:creator>
    <dc:date>2013-03-05T18:56:27Z</dc:date>
    <item>
      <title>persist basemap across maps within browser session</title>
      <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140256#M13014</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;We are building an app in which our users would like to select a particular basemap from the gallery. Our application consists of many pages showing various assets. We would like to persist the basemap for the user's current session. This seems to be pretty simple if we can store the basemap id the user last selected. This works fine using the "onSelectionChange" event of the BasemapGallery.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;However, we are having a terrible trying to set the basemap programmatically when the new page loads. We read the cookie properly, but we can't seem to figure out the right time to call select(id) on the BasemapGallery. It seems that the BasemapGallery always fires once with the &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;first&lt;/SPAN&gt;&lt;SPAN&gt; map selection. Yes, we can handle this, but the result is very hacky in our mind. &lt;/SPAN&gt;&lt;STRONG&gt;Is there a way to specify which basemap to use after &lt;SPAN style="font-style:italic;"&gt;startup()&lt;/SPAN&gt;?&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is our latest attempt:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
dojo.require("esri.map");
dojo.require("esri.dijit.BasemapGallery");
dojo.require("dojo/cookie");

var map;

function init() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; map = new esri.Map("mapDiv", {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; center: [19.461, 53.914],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zoom: 5
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp; var basemapGallery = new esri.dijit.BasemapGallery({
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; showArcGISBasemaps: true,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bingMapsKey: 'afdafadsfdsafsdfasdfdsfdsf_afdfafdasfdsaf',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map: map
&amp;nbsp;&amp;nbsp;&amp;nbsp; }, "basemapGallery");

&amp;nbsp;&amp;nbsp;&amp;nbsp; basemapGallery.startup();

&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.connect(basemapGallery, "onError", function (msg) { console.log(msg); });

&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.connect(basemapGallery, "onLoad", function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var basemapId = dojo.cookie("userSelectedBaseMap");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (basemapId != null) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basemapGallery.select(basemapId);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.connect(basemapGallery, "onSelectionChange", function () {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var selected = basemapGallery.getSelected();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.cookie("userSelectedBaseMap", selected.id);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 

}
dojo.ready(init);
&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;STRONG&gt;Is there a recommended way to achieve what we are trying to do? how about a recommendation on when to programmatically set the basemap selection?&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for any help,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Eric&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Mar 2013 03:54:31 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140256#M13014</guid>
      <dc:creator>ericliprandi</dc:creator>
      <dc:date>2013-03-05T03:54:31Z</dc:date>
    </item>
    <item>
      <title>Re: persist basemap across maps within browser session</title>
      <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140257#M13015</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Eric,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You might want to edit your code sample above to remove your bing maps key. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Try setting the selected basemap when the gallery loads.&amp;nbsp; Here's a code snippet showing this approach:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function init() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var initExtent = new esri.geometry.Extent({"xmin":-11727455,"ymin":4861652,"xmax":-11706340,"ymax":4871512,"spatialReference":{"wkid":102100}});
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map = new esri.Map("map", {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; center: [-105.255, 40.022],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; zoom: 8
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var basemapGallery = new esri.dijit.BasemapGallery({
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; showArcGISBasemaps: true,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map: map
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, "basemapGallery");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.connect(basemapGallery, "onLoad", function(){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basemapGallery.select("basemap_8");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basemapGallery.startup();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.ready(init);

&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 07:43:49 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140257#M13015</guid>
      <dc:creator>KellyHutchins</dc:creator>
      <dc:date>2021-12-11T07:43:49Z</dc:date>
    </item>
    <item>
      <title>Re: persist basemap across maps within browser session</title>
      <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140258#M13016</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Kelly,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for the Bing Maps stuff... I meant to do it and something went wrong... anyway, done now.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As for your code, how is it different from what I am doing? I too am listening to the "onLoad" event and setting the basemap. Ok, I read it from a cookie using dojo, but otherwise, this seems to be the same code. Am I missing something?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it worth mentioning that we are still using v3.1?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The issue is that, from my experiments, the gallery always selects the first basemap when it loads. So, in my code, since I want to persist the basemap selection for subsequent pages, it overwrites the cookie with that first basemap.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am tempted to just "skip" the first selection. However, it will start loading the first basemap (whatever that is) and then will switch to the basemap our customer actually wants to use.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IS there a way to have the gallery load but not select a basemap?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Eric.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Mar 2013 18:56:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140258#M13016</guid>
      <dc:creator>ericliprandi</dc:creator>
      <dc:date>2013-03-05T18:56:27Z</dc:date>
    </item>
    <item>
      <title>Re: persist basemap across maps within browser session</title>
      <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140259#M13017</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;FYI, I am unable to prevent the map from rendering with the first basemap in the BasemapGallery. Even if I do not call the startup() method, a layer is added to the map and it starts loading.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In the end, I ended up suspending the first layer that gets assigned to the map and then, I select the basemap I want. This seems to stop the rendering before it begins and giving a much better user experience. In the end, here is the code I have:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
var basemapGallery = new esri.dijit.BasemapGallery({
&amp;nbsp;&amp;nbsp;&amp;nbsp; showArcGISBasemaps: true,
&amp;nbsp;&amp;nbsp;&amp;nbsp; bingMapsKey: bingKey,
&amp;nbsp;&amp;nbsp;&amp;nbsp; map: map
}, "basemapGalleryDiv");
basemapGallery.startup();


var selectionHandler = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.connect(basemapGallery, "onSelectionChange", function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('#basemapGalleryModal').modal('hide');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var selected = basemapGallery.getSelected();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.cookie("selectedBasemapId", selected.id, { path: "/" });
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
};
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
var savedBaseMapId = dojo.cookie("selectedBasemapId");
if (savedBaseMapId != null) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; // we are going to changed the basemap, maybe, so prevent original drawing
&amp;nbsp;&amp;nbsp;&amp;nbsp; var initialLayerHandler = dojo.connect(map, "onLayerAdd", function(layer) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dojo.disconnect(initialLayerHandler);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layer.suspend();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basemapGallery.select(savedBaseMapId);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.addLayers(layers);
&amp;nbsp;&amp;nbsp;&amp;nbsp; });
} else {
&amp;nbsp;&amp;nbsp;&amp;nbsp; selectionHandler();
}
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 07:43:52 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/persist-basemap-across-maps-within-browser-session/m-p/140259#M13017</guid>
      <dc:creator>ericliprandi</dc:creator>
      <dc:date>2021-12-11T07:43:52Z</dc:date>
    </item>
  </channel>
</rss>

