Postmark模板中Mustachio作用域内添加条件语句的实现方法
解决Postmark模板中Mustachio作用域访问问题
针对你遇到的语言标签内无法访问根层级变量的问题,提供以下几种可行方案:
方案1:使用@root直接访问根变量
多数现代Mustache衍生实现(包括Postmark的Mustachio)支持@root语法直接调用根层级的变量,无需修改现有数据结构。调整模板如下:
{{french}}Bonjour {{^@root.isToday}}demain{{/@root.isToday}}{{/french}} {{english}}Hello {{^@root.isToday}}tomorrow{{/@root.isToday}}{{/english}}
这样在french/english的section内部,通过@root.isToday就能直接访问到根对象中的isToday字段。
方案2:调整数据结构,重构语言字段
将原布尔值类型的语言字段改为嵌套对象,让../能正确向上遍历作用域:
修改后的数据模型
{ "lang": { "french": true }, "isToday": true }
调整后的模板
{{#lang.french}}Bonjour {{^../isToday}}demain{{/isToday}}{{/lang.french}} {{#lang.english}}Hello {{^../isToday}}tomorrow{{/isToday}}{{/lang.english}}
此时../isToday会指向lang对象的父级(即根对象)中的isToday字段,作用域访问正常。
方案3:改用单一语言标识字段
放弃多布尔值的语言标记方式,改用单一字符串字段指定当前语言,彻底避免作用域问题:
修改后的数据模型
{ "language": "french", "isToday": true }
调整后的模板
{{#eq language "french"}}Bonjour {{^isToday}}demain{{/isToday}}{{/eq}} {{#eq language "english"}}Hello {{^isToday}}tomorrow{{/isToday}}{{/eq}}
注意:此方案依赖Postmark模板支持eq比较助手(Postmark默认支持这类常用助手),所有变量都处于同一作用域,不会出现访问问题。
内容的提问来源于stack exchange,提问作者user14591246
相关产品推荐
相关产品推荐

