如下面所示,动态创建的div,设置了id后,浏览器也能看到,但是刷新(并非刷新浏览器页面)重新加载图纸,div会被自动移除及重新创建,合情合理,因为是随着渲染元素机制走的。

所以在创建div之前判断浏览器是否已有这样id的dom元素,显然不会存在,也就是不会到alert(999)

JavaScript
if (!cache.obj) {
    let oldobj = document.getElementById('mymap');
    if(oldobj){
        alert(9999)
    }

let obj = cache.obj = document.createElement('div');
    obj.id = 'mymap'
    
    ……

如果渲染元素中有用importCssJs来动态加载js,并且用来操作这个动态创建的div dom元素,那么会出现以下问题:

刷新重新加载图纸时,dom元素对象被重新创建,此前的也自动被移除释放了,而动态加载的js可通过importCssJs的第二个参数传入true来重新加载,或者传入false不再重新加载、利用上次加载的而且留在内存的js执行结果(比如对象、函数等),不管是哪种方式,都可以通过加载完成回调函数继续执行接下来的步骤。

如果importCssJs第二个参数传入false,那么一旦js已加载过,就不会重新加载而是利用此前加载执行后的结果,这会导致运行出现部分正常、部分异常的奇怪现象:

  • 丢失js操作元素后的结果,因为这是新的dom元素了,此前旧的dom在刷新的时候已被自动移除;但是,要知道虽然不重新加载js,但是回调函数同样会触发,进入到L.map(obj)传入dom元素对象,也是对其进行操作,那为什么重新加载图纸地图会显示不全呢?
  • 只要不刷新浏览器页面,内存中上次加载js执行后内存结果还在,比如已创建全局对象实例L;
  • 刷新浏览器页面时,dom和内存都被刷新,加载一般就会正常了!随后不刷新页面只重新打开图纸或刷新图纸就会出现前面两点的现象!
  • 直接运行预览图纸或图标,上述问题不会存在,于是表现出编辑状态异常、运行状态正常的现象!因为内存数据和dom能匹配对应,不像编辑状态会存在单方面重新加载图纸重入渲染元素但是浏览器内存数据不刷新!

如果importCssJs第二个参数传入true,那么运行正常编辑状态下地图也能展开显示全,但是浏览器会报错:Can only have one anonymous define call per script file,以此作为临时解决方案!能显示正常就好了,编辑状态下重新加载图纸有monaco编辑器define导致 插件加载不出来并提示Uncaught Error: Can only have one anonymous define call per script file的报错先不理会!

后续做leaflet地图深度二次开发了解两个js全局对象以及对div dom元素的操作更多原理后再来想解决办法!(或者从编辑器本身触发,但是原则上应该从js库的调用做,并且考虑L.noConflict()怎么用起来?jquery也有,全局是$,也同样有方法noConflict,但是在我们这里的场景,是要动态重复载入,跟自己发生冲突而不是跟其他的引用全局变量的冲突,to be continue……)

leaflet地图原理;离线GIS地图组件可绘图包括路线动画并判断坐标是否在绘制的区域内;leaflet.motion:一个简单的以不同方式为折线和多边形设置动画的工具;GIS地图瓦片数据

【重要】组态渲染元素中通过importCssJs动态加载js并且直接使用定义的类、函数,在编辑、运行模式下有区别,与编辑器等其他全局js变量冲突

渲染元素中动态创建div来渲染html dom组件,是需要将element元素对象return返回的(也支持直接返回ht的widget、ui等视图view组件),刷新重新加载图纸相关推荐

  1. 在 JavaScript 中动态创建表格、按钮和 DIV

    使用 document.createElement() 方法,您可以在 JavaScript 中动态创建指定的 HTML 元素.创建后,您可以将元素插入(或添加)到您的网页,或将其添加到预定义元素或动 ...

  2. php动态增加div,JavaScript动态创建div等元素实例

    js动态创建div等元素实例 var Test={ createDiv:function(){ var div = document.createElement('div'); div.id=&quo ...

  3. js动态创建div等元素实例

    为了节省时间,就直接贴代码了!希望大家多多的关注我! <html><head><title>js动态创建div等元素实例</title><styl ...

  4. python创建类的实例方法-Python中动态创建类实例的方法

    简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模 ...

  5. WPF 中动态创建和删除控件

    WPF 中动态创建和删除控件 原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件 ...

  6. MFC中动态创建控件以及事件响应实现方法

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  7. MFC中动态创建控件以及添加事件响应

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  8. php动态创建变量名,PHP中动态创建变量名(可变变量)

    PHP中,我们可以动态地创建一个变量名.例如,你想要使用与数据库查询得到的字段名称一致的变量名. 使用PHP中"可变变量"的语法,即在一个其值为你想作为变量名称的变量前面加一个$: ...

  9. php变量名动态生成,PHP中动态创建变量名(可变变量) | 学步园

    PHP中,我们可以动态地创建一个变量名.例如,你想要使用与数据库查询得到的字段名称一致的变量名. 使用PHP中"可变变量"的语法,即在一个其值为你想作为变量名称的变量前面加一个$: ...

最新文章

  1. python flask 部署_如何进行Python Flask项目的部署?
  2. 为什么这些死脑筋们在用 VI ?
  3. mysql 常用操作
  4. ​Xamarin iOS教程之视图显示图像
  5. [翻译] RKCardView
  6. 主成分分析法_数学建模 || 葡萄酒的评价(1)主成分分析法
  7. 使用DataTable更新数据库
  8. 删除a标签下面的横线
  9. R语言之——字符串处理函数
  10. AndroidTV开发(十一)Android Tv Launcher自定义RecyclerView
  11. 黑客X档案 2008~2012 NPM、PYPI、DockerHub 备份
  12. ISO7637-2瞬态浪涌波形详解
  13. HS8145X6华为界面telnet23账号密码重置
  14. 级联rc滤波_六阶级联式开关电容低通滤波器设计与仿真分析
  15. Mac自带的邮件 添加邮箱 无法验证账户或密码【已解决】
  16. 【论文复刻】企业数字化转型与资本市场表现——来自股票流动性的经验证据(2007-2021年数据)
  17. ffmpeg转换视频内存溢出的问题
  18. 如何领取鸿蒙开发板,如何获取鸿蒙开发板?鸿蒙开发板免费试用通道!
  19. Android PopupWindow监听点击外部事件
  20. 四招搞定心仪的offer

热门文章

  1. 成为CSDN博客专家感言
  2. Scss实现Ant design色板生成算法
  3. 扫扫扫,二维码会有被人类用完吗
  4. 如何解决WIN7下默认打开方式无效的问题
  5. ESXI6 网卡驱动封装之离线封装
  6. 【Mac】Alfred4有道翻译的workflow实现
  7. 音质好的电脑录音软件是哪个
  8. 华为数通HCIE面试看这个就够了系列——IPv6
  9. qq好友克隆-转好友
  10. 人工智能OA期刊,推荐给需要的UU们