Accessor 是一个抽象类,它便于访问实例属性,以及一种监视属性更改的机制。Accessor 的每个子类都定义了可直接访问或使用 get() 和 set() 方法访问的属性。可以使用 watch() 方法监视属性更改。
属性概述
名称 | 类型 | 描述 | 类 |
---|---|---|---|
String | 类的名称。 更多详情 | Accessor |
属性详细信息
-
declaredClass Stringreadonly起始版本:GeoScene Maps SDK for JavaScript 4.7
-
类的名称。声明的类名称格式化为
geoscene.folder.className
。
方法概述
名称 | 返回值类值 | 描述 | 类 |
---|---|---|---|
添加一个或多个与对象的生命周期相关联的句柄。 更多详情 | Accessor | ||
Accessor | 创建调用此方法的类的子类。 更多详情 | Accessor | |
* | 获取属性的值。 更多详情 | Accessor | |
Boolean | 如果存在指定的句柄组,则返回 true。 更多详情 | Accessor | |
移除对象拥有的句柄组。 更多详情 | Accessor | ||
* | 设置属性的值。 更多详情 | Accessor | |
WatchHandle | 监视实例上的属性更改。 更多详情 | Accessor |
方法详细说明
-
addHandles(handleOrHandles, groupKey)起始版本:GeoScene Maps SDK for JavaScript 4.25
-
添加一个或多个与对象的生命周期相关联的句柄。当对象被销毁时,将移除句柄。
// 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);
参数handleOrHandles WatchHandle|WatchHandle[]对象销毁后,标记为要移除的句柄。
groupKey *optional标识句柄应添加到的组的键。组中的所有句柄稍后都可使用 Accessor.removeHandles() 进行删除。如果未提供键,则句柄将被添加到默认组。
-
起始版本:GeoScene Maps SDK for JavaScript 4.21
-
创建调用此方法的类的子类。
参数classDefinition Object具有可混入新建类的属性和方法的对象。
返回类型 描述 Accessor 返回新创建的类的构造函数。
-
get(path){*}
-
获取属性的值。
属性的名称可以引用实例中的属性。有关更多信息,请参阅使用属性指南部分。
view.get("scale");
它也可以是实例中更深层次的属性的路径。如果路径中的属性不存在,则
get()
返回undefined
。let title = map.get("basemap.title"); // equivalent of let title = map.basemap && map.basemap.title || undefined;
参数path String要获取的属性的路径。
返回类型 描述 * 属性的值。
-
hasHandles(groupKey){Boolean}起始版本:GeoScene Maps SDK for JavaScript 4.25
-
如果存在指定的句柄组,则返回 true。
参数groupKey *optional组键。
返回类型 描述 Boolean 如果存在指定的句柄组,则返回 true
。示例// Remove a named group of handles if they exist. if (obj.hasHandles("watch-view-updates")) { obj.removeHandles("watch-view-updates"); }
-
removeHandles(groupKey)起始版本:GeoScene Maps SDK for JavaScript 4.25
-
移除对象拥有的句柄组。
参数groupKey *optional要移除的组键或组键的数组或集合。
示例obj.removeHandles(); // removes handles from default group obj.removeHandles("handle-group"); obj.removeHandles("other-handle-group");
-
set(path, value){*}
-
设置属性的值。
使用属性名称和值调用
set()
,以更改属性的值。// setting the basemap of the map map.set("basemap", "tianditu-vector"); // is equivalent to map.basemap = "tianditu-vector"; // currying set let updateViewScale = view.set.bind(view, "scale"); updateViewScale(5000);
set()
可使用属性和值的路径进行调用。如果路径中的属性不存在,则不会设置该属性。// 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"; }
可以将具有键值对的对象传递给
set()
以一次更新多个属性。// 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 });
参数要设置的属性的路径,或键值对的对象。
value *要在属性上设置的新值。
返回类型 描述 * 实例。
-
watch(path, callback){WatchHandle}
-
监视实例上的属性更改。有关观察属性更改时的其他功能,请参阅 reactiveUtils。
监视属性更改对于追踪对象的更改至关重要。要开始监视属性的更改,请使用属性名称和回调函数调用
watch()
,该回调函数将在每次属性更改时执行。let handle = mapview.watch("scale", function(newValue, oldValue, propertyName, target) { console.log(propertyName + " changed from " + oldValue + " to " + newValue); });
要停止监视更改,请在
watch()
返回的对象上调用remove()
方法。handle.remove();
存储来自
watch()
的结果对象以正确清理引用非常重要。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);
像
get()
和set()
一样,可以通过传递路径来观察对象层次结构深处的属性。如果路径中的属性不存在,则使用undefined
调用监视回调。let view = new SceneView({ map: new Map({ basemap: "tianditu-vector" }) }); view.watch("map.basemap.title", (newValue, oldValue) => { console.log("basemap's title changed from " + oldValue + " to " + newValue); }); view.map.basemap = "tianditu-vector"; // output: "basemap's title changed from Streets to Topographic" view.map = null; // output: "basemap's title changed from Topographic to undefined"
传递以逗号分隔的属性路径列表或属性路径数组,以使用相同的回调监视多个属性。使用回调调用的第三个参数来确定更改了哪些属性。
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
属性值更改后,不会立即为属性调用监视回调。相反,当一个属性的值发生变化并且该属性被监视时,Accessor
会计划一个通知,然后在以后处理该通知。可以查看如view.scale
这样频繁更改的属性,而无需限制回调。// 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
参数要监视的一个或多个属性。可以将多个属性指定为逗号分隔的列表。
callback watchCallback属性值发生更改时,要执行的回调。
返回类型 描述 WatchHandle 监视句柄。 - 另请参阅
-
- reactiveUtils - 在观察属性时,提供附加功能。
类型定义
-
watchCallback(newValue, oldValue, propertyName, target)
-
当监视的属性发生更改时,调用的回调。
参数newValue *被监视属性的新值。
oldValue *被监视属性的旧值。
propertyName String属性名称。
target Accessor包含被监视属性的对象。
-
WatchHandle Object
-
表示可以移除的监视或事件处理程序。
- 属性
-
remove Function
移除侦听句柄。
示例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();