【问题标题】:Can I add a complex handlebar expression?我可以添加复杂的车把表达式吗?
【发布时间】:2021-05-04 13:36:58
【问题描述】:

我正在尝试在 SendGrid 中创建一个动态模板。我的应用程序中有一个用于 storeName 的车把。 {{ 商店名称 }}

现在有超过 100 家商店在 4 种不同的横幅(例如 Real One、Low Beam、Monte 和 Huskar Promo)下,并且 StoreName 具有唯一的横幅名称和商店编号(例如 Real One - 2010、Real一 - 2222,蒙特 - 1524)。

每个横幅都有一个徽标。我没有标志的车把。所以我决定根据 storeName 使用条件车把表达式将徽标放在模板上。在模板中放置 100 个徽标表达式太繁重且不切实际。

我用过这样的东西。

{{#equals StoreName "Real One - 2010"}}
logo.png
{{else}}{{{{#equals StoreName "Monte - 1524"}}
logo2.png
{{/equals}}{{/equals}}

有没有办法使用“包含”来匹配车把中 storeName 字符串上的至少一个单词,所以我只需要使用 4 个条件表达式来实现这一点?还是其他方式?

【问题讨论】:

    标签: javascript handlebars.js sendgrid


    【解决方案1】:

    是的,你可以写一个custom Handlebars helper 来测试一些字符串是否包含另一个字符串。看起来您正在寻找目标字符串开头的子字符串,我将举一个 startsWith 自定义助手的示例:

    
    Handlebars.registerHelper('startsWith', function (full, part, options) {
        if (full.startsWith(part)) {
            return options.fn(this);
        }
        return options.inverse(this);
    });
    

    您的模板语法有点不对劲。您需要在 else 的小胡子中包含帮助程序调用,如下所示:

    {{#startsWith StoreName 'Real One'}}
        Real One logo
    {{else startsWith StoreName 'Monte'}}
        Monte logo
    {{/startsWith}}
    

    我创建了一个fiddle 供参考。

    【讨论】:

    • 如果在模板编辑器中使用模板,JS驻留在哪里?
    • @IanHoar:可能无法使用模板编辑器创建自定义助手。
    • 我认为你是对的,我找不到任何关于它的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    相关资源
    最近更新 更多