# How to listen to change in selected basemap imagery?

**URL:** <https://community.cesium.com/t/how-to-listen-to-change-in-selected-basemap-imagery/5300>\
**Category:** CesiumJS\
**Created:** [March 18, 2017, 4:56pm UTC](https://community.cesium.com/t/how-to-listen-to-change-in-selected-basemap-imagery/5300 "2017-03-18T16:56:58Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jacob](https://avatars.discourse-cdn.com/v4/letter/j/f1d935/32.png) [@Jacob](https://community.cesium.com/u/Jacob)\
**Post date:** [March 18, 2017, 4:56pm UTC](https://community.cesium.com/t/how-to-listen-to-change-in-selected-basemap-imagery/5300/1 "2017-03-18T16:56:58Z")

</div>

I want to respond when the user selects a new basemap. I don’t see any specific events for this. Am I missing one?

I noticed that the reference for the selectedImagery member of [BaseLayerPickerViewModel](https://cesiumjs.org/Cesium/Build/Documentation/BaseLayerPickerViewModel.html)states:

Gets or sets the currently selected imagery. This property is observable.

This suggests I might be able to observe a property change here to get what I want. Using definitonChanged as suggested by the [Property](https://cesiumjs.org/Cesium/Build/Documentation/Property.html)reference, I try this:

this.\_map.baseLayerPicker.viewModel.selectedImagery.definitionChanged.addEventListener(

this.\_onBasemapChange.bind(this)

);

But this produces an error: Cannot read property ‘addEventListener’ of undefined

It seems I don’t get definitionChanged here. What am I doing wrong?

Thanks,

Jacob

---

<div class="post-metadata">

**Author:** ![Scott\_Hunter](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/scott_hunter/32/2006_2.png) [@Scott\_Hunter](https://community.cesium.com/u/Scott_Hunter)\
**Post date:** [March 20, 2017, 2:23pm UTC](https://community.cesium.com/t/how-to-listen-to-change-in-selected-basemap-imagery/5300/2 "2017-03-20T14:23:07Z")

</div>

In the docs, when we refer to “observable” properties, this is a Knockout concept. (see [http://knockoutjs.com](http://knockoutjs.com) for more info) The Knockout observable properties can be obtained using Cesium.knockout.getObservable and then you can subscribe to changes.

Cesium.knockout.getObservable(viewer.baseLayerPicker.viewModel, ‘selectedImagery’).subscribe(function(value) {

console.log([value.name](http://value.name));

});

This will run the given function whenever the value of selectedImagery changes. In this case, “value” will then be a ProviderViewModel which has its own set of properties such as “name” above. [http://cesiumjs.org/Cesium/Build/Documentation/ProviderViewModel.html](http://cesiumjs.org/Cesium/Build/Documentation/ProviderViewModel.html)

---

<div class="post-metadata">

**Author:** ![Jacob](https://avatars.discourse-cdn.com/v4/letter/j/f1d935/32.png) [@Jacob](https://community.cesium.com/u/Jacob)\
**Post date:** [March 20, 2017, 3:14pm UTC](https://community.cesium.com/t/how-to-listen-to-change-in-selected-basemap-imagery/5300/3 "2017-03-20T15:14:02Z")

</div>

Thank you!

---

<div class="post-metadata">

**Author:** ![abdullah.shaiknaina](https://avatars.discourse-cdn.com/v4/letter/a/a9adbd/32.png) [@abdullah.shaiknaina](https://community.cesium.com/u/abdullah.shaiknaina)\
**Post date:** [August 2, 2017, 3:06am UTC](https://community.cesium.com/t/how-to-listen-to-change-in-selected-basemap-imagery/5300/4 "2017-08-02T03:06:17Z")

</div>

HI Everyone,  
I have a question. When the user select a basemap, the basemap should be shown when the browser reloaded or the a new browser is opened… How to achieve that???

Best regards,

abdullah
