You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Leaflet弹窗标记中引入Twig页面出现语法错误求助

问题原因与解决方法

错误根源

控制台的Uncaught SyntaxError是由两个核心问题导致的:

  1. JavaScript字符串转义失败:将Twig模板内容直接嵌入JS字符串时,模板渲染后的换行、特殊字符未被转义,导致JS解析字符串时出现语法断裂,进而中断整个地图初始化代码,最终地图无法渲染。
  2. 子模板HTML语法错误:引入的_popover_carto_dreqs.html.twig存在未闭合的<b>标签,且内容无合理分隔,既影响HTML渲染,也加剧了JS字符串的解析问题。

修复步骤

1. 修复JavaScript字符串转义

修改主模板中setContent的代码,使用Twig的escape('js')过滤器,确保渲染后的HTML内容被转义为合法的JavaScript字符串:

// 替换原setContent行
.setContent("{{ include('dreq/maps/_popover_carto_dreqs.html.twig', {'dreq': element})|escape('js') }}");

或者使用过滤器包裹语法,效果一致:

.setContent("{% filter escape('js') %}
    {% include 'dreq/maps/_popover_carto_dreqs.html.twig' with {'dreq': element} %}
{% endfilter %}");

2. 修复子模板HTML语法

修正_popover_carto_dreqs.html.twig的语法错误,补全闭合标签并优化内容结构:

{{ operator(dreq.operator) }} 
channel: <b>{{ dreq.channelId }}</b> - file: <b>{{ dreq.fileName }}</b> - id: <b>{{ dreq.dreq_identifier }}</b><br>
- protocol: <b>{{ getProtocolsLabel(dreq.dreq_protocol) }}</b> - direction: <b>{{ dreq.direction }}</b><br>
file name: <b>{{ dreq.dreq_fileName }}</b> - file size: <b>{{ dreq.dreq_fileSize | formatSize }}</b><br>
status: <b>{{ dreq.dreqStatus }}</b> - packet: <b>{{ dreq.dreqPacketTechnoLabels }}</b>

主要修改点:

  • 补全最后一个<b>标签的闭合</b>
  • 添加<br>标签实现内容换行,避免JS字符串因换行断裂
  • 调整内容间距,提升可读性

3. 逻辑说明

单个Twig元素能正常运行的原因是:单个变量渲染后为单行无特殊字符的字符串,JS可直接解析;而多行模板内容包含换行、潜在引号等,未转义时会破坏JS字符串结构,导致语法错误,中断地图初始化流程。

内容的提问来源于stack exchange,提问作者zackzulg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:17:47