如下面所示,动态创建的div,设置了id后,浏览器也能看到,但是刷新(并非刷新浏览器页面)重新加载图纸,div会被自动移除及重新创建,合情合理,因为是随着渲染元素机制走的。
所以在创建div之前判断浏览器是否已有这样id的dom元素,显然不会存在,也就是不会到alert(999)
| JavaScript |

如果渲染元素中有用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变量冲突
本文探讨了在动态地图开发中,如何处理通过importCssJs动态加载的JS与页面刷新后DOM元素变化的问题。作者揭示了编辑/运行模式下不同操作导致的矛盾,以及如何应对Leaflet地图、编辑器冲突和L.noConflict()的应用。

被折叠的 条评论
为什么被折叠?



