Drupal自定义模块中未分组标记使用Control Layer筛选后无法重新显示问题
未分组Marker筛选后无法重新显示问题修复方案
根因说明
该问题仅在登录态出现、匿名访问正常,本质是Drupal登录后加载的管理员专属JS脚本和Marker控制逻辑存在全局作用域冲突,匿名状态下不会加载这类后台专属脚本,因此功能正常。
具体修复步骤
- 优先替换Marker可见性控制的写法,放弃直接操作
visible属性,改为调用地图SDK原生的setVisible方法,避免全局JS修改属性后不触发渲染的问题:
// 筛选触发时的正确写法 // 隐藏marker marker.setVisible(false); // 显示marker marker.setVisible(true);
- 给未分组Marker添加独立标识,和分组Marker的逻辑完全隔离,避免筛选时的遍历匹配错误:
// 初始化Marker阶段给未分组项加自定义标记 marker.isUnGrouped = true; // 复选框触发筛选时单独处理 const isChecked = document.querySelector('#你的筛选复选框ID').checked; allMarkers.forEach(item => { if(item.isUnGrouped) { item.setVisible(isChecked); } })
- 给自定义模块的JS添加闭包隔离全局作用域,避免Drupal全局jQuery或其他变量污染你的逻辑:
(function ($, Drupal) { // 你的所有Marker初始化、筛选控制逻辑都放在该闭包内 })(jQuery, Drupal);
验证方法:登录状态下打开浏览器控制台,点击复选框后打印无法显示的Marker的可见性属性,如果属性为true但界面不渲染,说明是全局JS拦截了属性变更的渲染触发,替换为原生
setVisible方法即可解决。
内容的提问来源于stack exchange,提问作者Daniele
相关产品推荐
相关产品推荐

