Hello,
I'm trying to use the default BasemapGallery widget with my 4.7 ArcGIS JS application - but only with 4 of the basemaps. The others are superfluous for the app. I know that the BasemapGallery has a Collection of Basemap objects, but I can't seem to access it. For instance, the below code doesn't clear a basemap from the BasemapGallery:
var basemapGallery = new BasemapGallery({
view: view,
container: document.createElement("div")
});
basemapGallery.viewModel.items.removeAt(2); //does not work
How do I do this?
Thanks so much,
Jason
Solved! Go to Solution.
Jason,
This is how I do it:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>BasemapGallery widget - 4.7</title>
<link rel="stylesheet" href="https://js.arcgis.com/4.7/esri/css/main.css">
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<script src="https://js.arcgis.com/4.7/"></script>
<script>
require([
"esri/Map",
"esri/views/SceneView",
"esri/widgets/BasemapGallery",
"esri/core/watchUtils",
"dojo/domReady!"
], function(
Map, SceneView, BasemapGallery, watchUtils
) {
var map = new Map({
basemap: "gray"
});
var view = new SceneView({
container: "viewDiv",
map: map,
center: [139.68, 35.68],
zoom: 3
});
var basemapGallery = new BasemapGallery({
view: view
});
// Add the widget to the top-right corner of the view
view.ui.add(basemapGallery, {
position: "top-right"
});
watchUtils.once(basemapGallery.source.basemaps,"length", function(state){
setTimeout(function(){
basemapGallery.source.basemaps.removeAt(2);
}, 200);
});
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
Jason,
This is how I do it:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>BasemapGallery widget - 4.7</title>
<link rel="stylesheet" href="https://js.arcgis.com/4.7/esri/css/main.css">
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<script src="https://js.arcgis.com/4.7/"></script>
<script>
require([
"esri/Map",
"esri/views/SceneView",
"esri/widgets/BasemapGallery",
"esri/core/watchUtils",
"dojo/domReady!"
], function(
Map, SceneView, BasemapGallery, watchUtils
) {
var map = new Map({
basemap: "gray"
});
var view = new SceneView({
container: "viewDiv",
map: map,
center: [139.68, 35.68],
zoom: 3
});
var basemapGallery = new BasemapGallery({
view: view
});
// Add the widget to the top-right corner of the view
view.ui.add(basemapGallery, {
position: "top-right"
});
watchUtils.once(basemapGallery.source.basemaps,"length", function(state){
setTimeout(function(){
basemapGallery.source.basemaps.removeAt(2);
}, 200);
});
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
That does it. I needed to add the watchUtil...I guess I was removing basemaps before they had been added. Thanks!!