Mustache模板如何阻止指定变量渲染 实现全字段正确渲染
问题原因
- 分两次渲染的方案本身不成立:Mustache的默认逻辑是,当前渲染上下文里找不到对应变量时,会直接把占位符替换为空字符串,不会保留原
{{变量名}}格式留给下一次渲染。所以你第一次渲染表格时,传入的上下文没有FunderName字段,就直接把{{FunderName}}替换成空了,根本无法留到第二次渲染处理。 - 单次渲染失败是传参错误:你使用的
Mustache.render(template, { data })写法,相当于给模板传入的顶层上下文只有data这一个属性,既没有顶层的FunderName字段,也和你模板里写的循环路径{{#data.data}}不匹配,自然无法正确替换表格外的变量。
可行方案
不需要做特殊配置阻止Mustache渲染指定区域,也不用分两次渲染,只要调整传参让上下文和模板路径匹配,一次渲染就能完成所有变量替换:
直接把完整的数据源对象作为渲染上下文传入,不要额外套一层对象包裹,修改渲染代码如下:
// 原错误写法 // let renderTemplateContent = Mustache.render(template, { data }); // 修正后写法 let renderTemplateContent = Mustache.render(template, data);
修正后:
- 模板里的
{{#data.data}}循环可以正确匹配到数据源里的数组,遍历渲染每一行的合作方名称、持有天数、到期日期字段 - 表格外的
{{FunderName}}可以直接从顶层上下文取到对应值andy,最终渲染出Hello andy的正确结果
如果后续遇到循环内部需要引用顶层变量的场景,可以使用Mustache的上级上下文语法{{../变量名}}取值,比如在表格行里要输出FunderName,写{{../FunderName}}即可。
内容的提问来源于stack exchange,提问作者user18605090
相关产品推荐
相关产品推荐

