SendGrid动态模板中如何基于字符串包含关系动态显示复选框?
SendGrid动态模板中如何基于字符串包含关系动态显示复选框?
我完全明白你遇到的问题了——想用SendGrid动态模板根据逗号分隔的字符串内容,自动显示对应选中/未选中的禁用复选框,但试了LIKE不管用,又找不到合适的contains函数,确实头疼!
首先得说清楚:SendGrid的动态模板用的是Handlebars语法,不支持SQL里的LIKE写法,所以你之前的条件判断逻辑才会出现“一直返回true或false”的问题。不过我们可以用Handlebars支持的原生字符串/数组方法来解决,给你两个靠谱的方案:
方案一:用indexOf判断字符串包含关系
这是最稳妥的方法,几乎所有版本的SendGrid模板都支持字符串的indexOf方法。这个方法会返回子串在原字符串中的起始位置,如果找不到就返回-1,我们结合Handlebars的ne(不等于)辅助函数就能判断是否包含目标子串。
比如判断b是否在InputVar中的代码:
{{#if (ne (indexOf InputVar 'b') -1)}} <input type="checkbox" disabled checked> {{else}} <input type="checkbox" disabled> {{/if}}
同理,判断a就把'b'换成'a',判断c换成'c'就行。
原理很简单:如果indexOf返回的结果不是-1,就说明原字符串里包含这个子串,我们就渲染选中的禁用复选框;反之就渲染未选中的。
方案二:转成数组后用includes判断(更严谨)
如果担心出现类似"ab,c"这种场景(比如你要判断的是a,但原字符串里的ab会被indexOf误判),可以先把逗号分隔的字符串转成数组,再用includes方法判断是否包含目标元素,这样结果更准确。
代码示例:
{{#if (includes (split InputVar ',') 'b')}} <input type="checkbox" disabled checked> {{else}} <input type="checkbox" disabled> {{/if}}
这里split InputVar ','会把"a,c"转成数组['a','c'],然后includes方法会直接判断目标元素'b'是否在这个数组里,完全不会有子串误判的问题。
小提醒
- 如果你的输入字符串可能带有空格(比如
"a, c"),那判断的时候要对应写' c',或者提前要求输入是无空格的逗号分隔格式,这样更省心。 - 如果你要判断的是多字符的选项(比如
"apple,banana"),优先用方案二,彻底避免indexOf的误判风险。
内容来源于stack exchange
相关产品推荐
相关产品推荐

