码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ArcGIS JS自定义Accessor,并通过watchUtils相关方法watch属性


    技术需求:使用watchUtils类,whenTrue相关方法,监测属性。

    业务需求:地图类库中,需要读内网的一个接口,判断网络是否为内网,以实现在内网环境下访问内网服务器中更多的地图资源。计划通过一个标识,通过xhr请求接口后设置该标识。之后,地图相关函数,在执行之前判断一下该变量,是否为true,防止因为异步导致的一些变量没有完成初始化。

    自定义Accessor类

    1. /**
    2. * 20220727
    3. * 地图初始化对象监控 主要用于记录地图初始化工作是否完成
    4. */
    5. import Accessor from "esri/core/Accessor";
    6. import { property, subclass } from "esri/core/accessorSupport/decorators";
    7. @subclass("custom.MO")
    8. class MO extends Accessor {
    9. private isOK: boolean = false;
    10. constructor() {
    11. super();
    12. this.isOK = false;
    13. }
    14. @property()
    15. get isIni(): boolean {
    16. return this.isOK;
    17. }
    18. set isIni(val: boolean) {
    19. const oldValue = this.get<boolean>("isIni");
    20. if (oldValue !== val) {
    21. // a setter has to update the value from the cache
    22. // this.set("isIni", val);
    23. this.isOK = val;
    24. this.notifyChange("isIni");
    25. }
    26. }
    27. }
    28. export = MO;

    主函数中使用示例

    1. import watchUtils = require("esri/core/watchUtils");
    2. watchUtils.whenTrue(this.mo, "isIni", () => {
    3. if (tp == "layerlist") {
    4. if (collapsed) t.expandLayerList.collapse();
    5. else t.expandLayerList.expand();
    6. }
    7. if (tp == "legend") {
    8. if (collapsed) {
    9. t.expandLegend.collapse();
    10. } else {
    11. t.expandLegend.expand();
    12. }
    13. }
    14. });

    需要注意避坑的是,在测试时出现异常:

    一直怀疑是自定义类写的有问题,导致没有获取到该属性,查了很多资料,换了很多种写法。 最后忽然想起之前自己写的帖子,

    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

  • 相关阅读:
    RSA加密算法
    [移动通讯]【Carrier Aggregation-4】【LTE-5】
    测试和开发的日常互撕,真的不能好好解决嘛?
    Docker部署JavaWeb应用
    1506_TC275参考手册阅读笔记_ED芯片
    Python 潮流周刊第 46 期(摘要)+ 赠书 7 本
    论文写作--30条总结
    快速发布服务到生产环境(手动操作)
    Linux内存管理(十):unflatten_device_tree 详解
    web前端期末大作业:JavaScript大作业——福五鼠动漫网页制作(6页)带轮播图效果 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作
  • 原文地址:https://blog.csdn.net/u012839776/article/details/126019531
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号