Accessor

AMD: require(["esri/core/Accessor"], (Accessor) => { /* code goes here */ });
ESM: import Accessor from "@arcgis/core/core/Accessor";
Class: esri/core/Accessor
Subclasses: ActionBase , ActiveLayerInfo , AddressCandidate , AggregateField , AggregatedGeometry , ApplicationProperties , ApplicationProperties , AreaMeasurement3DViewModel , AreaMeasurementAnalysis , AreasAndLengthsParameters , Association , AssociationGeometriesResult , AttachmentInfo , AttachmentQuery , AttachmentsViewModel , AttributeColorInfo , AttributionViewModel , AuthoringInfo , AuthoringInfoVisualVariable , Background , BarChartMediaInfo , BarcodeScannerInput , Basemap , BasemapGalleryItem , BasemapGalleryViewModel , BasemapLayerListViewModel , BasemapToggleViewModel , BasemapView , Bookmark , BookmarksViewModel , BufferParameters , BuildingComponentSublayerView , BuildingExplorerViewModel , BuildingFilter , BuildingLevel , BuildingPhase , BuildingSublayer , BuildingSummaryStatistics , ButtonMenuItem , ButtonMenuViewModel , Callout3D , Camera , ChartMediaInfoValue , ChartMediaInfoValueSeries , ClassBreakInfo , ClosestFacilityParameters , ClosestFacilitySolveResult , CloudyWeather , Collection , ColorBackground , ColorRamp , ColorSizeStop , ColorStop , ColormapInfo , ColumnTemplateBase , ComboBoxInput , CompassViewModel , Content , ControlPointsGeoreference , Conversion , CoordinateConversionViewModel , CornersGeoreference , CreateFeaturesWorkflowData , CreateWorkflowData , Credential , CustomTemplate , DataFile , DataLayer , DataModel , DatePickerViewModel , DateTimePickerInput , DaylightViewModel , DensifyParameters , DeviceLocationFeed , DimensionAnalysis , DimensionAnalysisView , DimensionSimpleStyle , DimensionalDefinition , DirectLineMeasurement3DViewModel , DirectLineMeasurementAnalysis , DirectionLine , DirectionPoint , DirectionsEvent , DirectionsFeatureSet , DirectionsViewModel , DistanceMeasurement2DViewModel , DistanceParameters , Domain , Draw , DrawAction , Edges3D , EditorViewModel , Edits , Element , ElementExpressionInfo , ElevationProfileLine , ElevationProfileViewModel , Environment , ExpandViewModel , ExpressionInfo , ExpressionInfo , ExpressionInfo , ExpressionInfo , ExtentAndRotationGeoreference , FacilityLayerInfo , FeatureEffect , FeatureFenceParameters , FeatureFilter , FeatureFilter , FeatureFormViewModel , FeatureLayerSource , FeatureReductionBinning , FeatureReductionCluster , FeatureReductionSelection , FeatureSet , FeatureSnappingLayerSource , FeatureTableViewModel , FeatureTemplate , FeatureTemplatesViewModel , FeatureType , FeatureViewModel , FenceGeotrigger , Field , FieldColumn , FieldConfig , FieldGroupConfig , FieldIndex , FieldInfo , FieldInfoFormat , FindParameters , FindResult , FloorFilterViewModel , FlowRenderer , FoggyWeather , Font , FormTemplate , Format , FullscreenViewModel , FunctionResult , GPMessage , GamepadInputDevice , GamepadSettings , GamepadSettings , GeneralizeParameters , Geometry , GeometryFieldsInfo , Geotrigger , GeotriggerNotificationOptions , GeotriggersInfo , GraphApplyEdits , GraphApplyEditsResult , GraphObject , GraphObjectType , GraphProperty , GraphQuery , GraphQueryResult , GraphQueryStreamingResult , GraphSearch , Graphic , Ground , GroundView , GroupColumn , HandleOwner , HeatmapColorStop , HeightModelInfo , HistogramViewModel , HomeViewModel , IdentifyParameters , IdentifyResult , ImageAngleParameters , ImageAngleResult , ImageElement , ImageHistogramParameters , ImageIdentifyParameters , ImageIdentifyResult , ImageMediaInfo , ImageMediaInfoValue , ImageParameters , ImageParameters , ImagePixelLocationParameters , ImagePixelLocationResult , ImageSample , ImageSampleParameters , ImageSampleResult , InitialViewProperties , InitialViewProperties , Input , InputField , InputFieldGroup , InputQuantizationParameters , JobInfo , KMLSublayer , KnowledgeGraph , LOD , LabelClass , Layer , LayerFloorInfo , LayerListViewModel , LayerOptions , LayerView , LegendLayer , LegendViewModel , LengthDimension , LengthsParameters , LevelLayerInfo , LineChartMediaInfo , LineOfSightAnalysis , LineOfSightAnalysisObserver , LineOfSightAnalysisTarget , LineOfSightTarget , LineOfSightViewModel , LineStyleMarker3D , LineStylePattern3D , LineSymbolMarker , LinearUnit , ListItem , LocalBasemapsSource , LocalMediaElementSource , LocateViewModel , Magnifier , Map , MapFloorInfo , MapImage , MeasurementViewModel , MeshComponent , MeshMaterial , MeshTexture , MosaicRule , MultidimensionalSubset , NAMessage , Navigation , NavigationToggleViewModel , Network , NetworkElement , NetworkFeatureSet , NetworkSystemLayers , NetworkUrl , OAuthInfo , OffsetParameters , OpacityStop , OutputQuantizationParameters , ParameterValue , Path , PieChartMediaInfo , PixelBlock , PointBarrier , PointCloudFilter , PointCloudRenderer , PolygonBarrier , PolylineBarrier , PopupTemplate , PopupViewModel , Portal , PortalFolder , PortalGroup , PortalItem , PortalItemResource , PortalQueryParams , PortalQueryResult , PortalRating , PortalUser , Presentation , PrintParameters , PrintTemplate , PrintViewModel , ProjectParameters , PublishingInfo , Query , QueryAssociationsParameters , QueryAssociationsResult , RadioButtonsInput , RainyWeather , RasterColormapRenderer , RasterData , RasterFunction , RasterInfo , RasterShadedReliefRenderer , RasterStretchRenderer , RelatedRecordsInfo , RelatedRecordsInfoFieldOrder , RelationParameters , Relationship , RelationshipQuery , Renderer , RouteInfo , RouteParameters , RouteResult , RouteSolveResult , RouteStopSymbols , RouteSymbols , ScaleBarViewModel , ScaleRangeSliderViewModel , ScaleRanges , SceneFilter , SceneModification , Search , SearchLayer , SearchLayerField , SearchSource , SearchTable , SearchTableField , SearchViewModel , ServerInfo , ServiceAreaParameters , ServiceAreaSolveResult , ShadowCastViewModel , SiteLayerInfo , SizeStop , SketchLabelOptions , SketchTooltipOptions , SketchViewModel , SliceAnalysis , SlicePlane , SlicePlane , SliceViewModel , Slide , SliderViewModel , SnappingControlsViewModel , SnappingOptions , SnowyWeather , SpatialReference , StatisticDefinition , Stop , StyleOrigin , StylePattern3D , Sublayer , SunLighting , SunnyWeather , SwipeViewModel , SwitchInput , Symbol , Symbol3DLayer , Symbol3DVerticalOffset , SynthesizeAssociationGeometriesParameters , TableTemplate , TemplateItem , TemplateItemGroup , TemplateOptions , Terminal , TerminalConfiguration , TextBoxInput , TileInfo , TileMatrixSet , TimeExtent , TimeInfo , TimeInterval , TimePickerViewModel , TimeReference , TimeSliderViewModel , TopFeaturesQuery , TopFilter , TraceLocation , TraceParameters , TraceResult , TrackViewModel , TravelMode , TrimExtendParameters , UI , UniqueValue , UniqueValueClass , UniqueValueGroup , UniqueValueInfo , UpdateWorkflowData , UtilityNetworkTraceViewModel , VectorFieldRenderer , VideoElement , View , ViewAnimation , ViewState , Viewing , Viewpoint , VirtualLighting , VisualVariable , WMSSublayer , WMTSStyle , WMTSSublayer , WeatherViewModel , Widget , Workflow , ZoomViewModel
Since: ArcGIS API for JavaScript 4.0

Accessor is an abstract class that facilitates the access to instance properties as well as a mechanism to watch for property changes. Every sub-class of Accessor defines properties that are directly accessible or by using the get() and set() methods. It is possible to watch for a property changes by using the watch() method.

See also

Property Overview

Name Type Summary Class
String

The name of the class.

more details
Accessor

Property Details

declaredClass Stringreadonly
Since: ArcGIS API for JavaScript 4.7

The name of the class. The declared class name is formatted as esri.folder.className.

Method Overview

Name Return Type Summary Class

Adds one or more handles which are to be tied to the lifecycle of the object.

more details
Accessor
Accessor

Creates a subclass of the class calling this method.

more details
Accessor
*

Gets the value of a property.

more details
Accessor
Boolean

Returns true if a named group of handles exist.

more details
Accessor

Removes a group of handles owned by the object.

more details
Accessor
*

Sets the value of a property.

more details
Accessor
WatchHandle

Watches for property changes on the instance.

more details
Accessor

Method Details

addHandles(handleOrHandles, groupKey)
Since: ArcGIS API for JavaScript 4.25

Adds one or more handles which are to be tied to the lifecycle of the object. The handles will be removed when the object is destroyed.

// Manually manage handles
const handle = reactiveUtils.when(
  () => !view.updating,
  () => {
    wkidSelect.disabled = false;
  },
  { once: true }
);

// Handle gets removed when the object is destroyed.
this.addHandles(handle);
Parameters
handleOrHandles WatchHandle|WatchHandle[]

Handles marked for removal once the object is destroyed.

groupKey *
optional

Key identifying the group to which the handles should be added. All the handles in the group can later be removed with Accessor.removeHandles(). If no key is provided the handles are added to a default group.

createSubclass(classDefinition){Accessor}static
Since: ArcGIS API for JavaScript 4.21

Creates a subclass of the class calling this method.

Parameter
classDefinition Object

An object with properties and methods to mix in to the newly created class.

Returns
Type Description
Accessor Returns a constructor of the newly created class.
get(path){*}

Gets the value of a property.

The name of the property can refer to a property in the instance. For more information, see the Working with properties Guide topic.

view.get("scale");

It can also be a path to a property deeper in the instance. get() returns undefined if a property in the path doesn't exist.

let title = map.get("basemap.title");

// equivalent of
let title = map.basemap && map.basemap.title || undefined;
Parameter
path String

The path of the property to get.

Returns
Type Description
* The property's value.
hasHandles(groupKey){Boolean}
Since: ArcGIS API for JavaScript 4.25

Returns true if a named group of handles exist.

Parameter
groupKey *
optional

A group key.

Returns
Type Description
Boolean Returns true if a named group of handles exist.
Example
// Remove a named group of handles if they exist.
if (obj.hasHandles("watch-view-updates")) {
  obj.removeHandles("watch-view-updates");
}
removeHandles(groupKey)
Since: ArcGIS API for JavaScript 4.25

Removes a group of handles owned by the object.

Parameter
groupKey *
optional

A group key or an array or collection of group keys to remove.

Example
obj.removeHandles(); // removes handles from default group

obj.removeHandles("handle-group");
obj.removeHandles("other-handle-group");
set(path, value){*}

Sets the value of a property.

Call set() with a property name and a value to change the value of the property.

// setting the basemap of the map
map.set("basemap", "topo-vector");
// is equivalent to
map.basemap = "topo-vector";

// currying set
let updateViewScale = view.set.bind(view, "scale");
updateViewScale(5000);

set() can be called with the path to a property and a value. The property is not set if a property in the path doesn't exist.

// updating the title of the basemap
map.set("basemap.title", "World Topographic Map");

// is equivalent to
if (map.basemap != null) {
  map.basemap.title = "World Topographic Map";
}

An object with key-value pairs may be passed into set() to update multiple properties at once.

// setting a viewpoint on the view
view.set({
  center: [-4.4861, 48.3904],
  scale: 5000
});

// currying set
let updateView = view.set.bind(view);

updateView({
  center: [-4.4861, 48.3904],
  scale: 5000
});
Parameters
path String|Object

The path to the property to set, or an object of key-value pairs

value *

The new value to set on the property.

Returns
Type Description
* The instance.
watch(path, callback){WatchHandle}

Watches for property changes on the instance. For additional capabilities when observing changes on properties, see reactiveUtils.

Watching for property changes is essential for tracking changes on objects. To start watching for changes on a property, call watch() with the property name and a callback function that will execute each time the property changes.

let handle = mapview.watch("scale", function(newValue, oldValue, propertyName, target) {
  console.log(propertyName + " changed from " + oldValue + " to " + newValue);
});

To stop watching for changes, call the remove() method on the object that watch() returns.

handle.remove();

It is important to store the resulting objects from watch() to properly clean up the references.

let viewHandles = [];
function setView(view) {
  // remove the handles for the current view.
  viewHandles.forEach(function(handle) {
    handle.remove();
  });
  viewHandles.length = 0;

  this.view = view;

  // watch for properties on the newly set view.
  if (view) {
    viewHandles.push(
      view.watch("scale", scaleWatcher);
    );
  }
}

setView(mapView);
setView(null);

Like get() and set(), it is possible to watch for a property deep in the object hierarchy by passing a path. If a property in the path doesn't exist the watch callback is called with undefined.

let view = new SceneView({
  map: new Map({
    basemap: "streets-vector"
  })
});

view.watch("map.basemap.title", (newValue, oldValue) => {
  console.log("basemap's title changed from " + oldValue + " to " + newValue);
});

view.map.basemap = "topo-vector";
// output: "basemap's title changed from Streets to Topographic"

view.map = null;
// output: "basemap's title changed from Topographic to undefined"

Pass a comma delimited list of property paths, or an array of property paths, to watch multiple properties with the same callback. Use the third parameter of the callback call to determine what property changed.

view.watch("center, scale, rotation", (newValue, oldValue, propertyName) => {
  console.log(propertyName + " changed");
});

// equivalent of
view.watch(["center", "scale", "rotation"], (newValue, oldValue, propertyName) => {
  console.log(propertyName + " changed");
});

// equivalent of
let callback = (newValue, oldValue, propertyName) => {
  console.log(propertyName + " changed");
}
view.watch("center", callback);
view.watch("scale", callback);
view.watch("rotation", callback);

Accessor doesn't call the watch callbacks for a property immediately after its value changes. Instead, when a property's value changes and if that property is watched, Accessor schedules a notification which is then processed at a later time. Properties that change frequently like view.scale can be watched without having to throttle the callback.

// Divides the view.scale three times
view.watch("scale", (newValue, oldValue) => {
  console.log("view's scale changed from " + oldValue + " to " + newValue);
});
console.log("current view scale: " + view.scale);
view.scale = view.scale / 2;
view.scale = view.scale / 2;
view.scale = view.scale / 2;
console.log("current view scale: " + view.scale);

// output the following:
// current view scale: 36978595.474472
// current view scale: 4622324.434309
// view's scale changed from 36978595.474472 to 4622324.434309
Parameters

The property or properties to watch. Multiple properties can be specified as a comma-separated list.

callback watchCallback

The callback to execute when the property value has changed.

Returns
Type Description
WatchHandle A watch handle
See also
  • reactiveUtils - provides additional capabilities when observing properties.

Type Definitions

watchCallback(newValue, oldValue, propertyName, target)

Callback to be called when a watched property changes.

Parameters
newValue *

The new value of the watched property.

oldValue *

The old value of the watched property.

propertyName String

The property name.

target Accessor

The object containing the property being watched.

WatchHandle Object

Represents a watch or event handler which can be removed.

Property
remove Function

Removes the watch handle.

Example
let handle = reactiveUtils.watch(() => map.basemap, (newVal) => {
  // Each time the value of map.basemap changes, it is logged in the console
  console.log("new basemap: ", newVal);
});

// When remove() is called on the watch handle, the map no longer watches for changes to basemap
handle.remove();

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.