技术需求:使用watchUtils 类 ,whenTrue相关方法,监测属性。
业务需求:地图类库中,需要读内网的一个接口,判断网络是否为内网,以实现在内网环境下访问内网 服务器 中更多的地图资源。计划通过一个标识,通过xhr请求接口后设置该标识。之后,地图相关函数,在执行之前判断一下该变量,是否为true,防止因为异步导致的一些变量没有完成初始化。
自定义Accessor类
/** * 20220727 * 地图初始化对象监控 主要用于记录地图初始化工作是否完成 */ import Accessor from "esri/core/Accessor";import { property, subclass } from "esri/core/accessorSupport/decorators"; @subclass("custom.MO")class MO extends Accessor { private isOK: boolean = false; constructor() { super(); this.isOK = false; } @property() get isIni(): boolean { return this.isOK; } set isIni(val: boolean) { const oldValue = this.get<boolean>("isIni"); if (oldValue !== val) { // a setter has to update the value from the cache // this.set("isIni", val); this.isOK = val; this.notifyChange("isIni"); } }} export = MO;主函数中使用示例
import watchUtils = require("esri/core/watchUtils"); watchUtils.whenTrue(this.mo, "isIni", () => { if (tp == "layerlist") { if (collapsed) t.expandLayerList.collapse(); else t.expandLayerList.expand(); } if (tp == "legend") { if (collapsed) { t.expandLegend.collapse(); } else { t.expandLegend.expand(); } } });需要注意避坑的是,在测试时出现异常:

一直怀疑是自定义类写的有问题,导致没有获取到该属性,查了很多 资料 ,换了很多种写法。 最后忽然想起之前自己写的帖子,
ArcGIS JS TypeScript urlUtils使用问题_不超限的博客-CSDN博客
将import watchUtils from "" 的写法,更改为
import watchUtils = require("")
经过测试后,发现可以正常实现。
官方ArcGIS JS Accessor类
Implementing Accessor | Overview | ArcGIS API for JavaScript 4.24 | ArcGIS Developers
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删