首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有字符串相等函数的手棒If-Else

具有字符串相等函数的手棒If-Else
EN

Stack Overflow用户
提问于 2017-12-06 19:03:06
回答 1查看 19.9K关注 0票数 7

HandlebarsJS不支持字符串相等('=='),所以我必须编写自己的助手,但这个答案并不清楚:

https://stackoverflow.com/a/15095019/1005607

代码语言:javascript
复制
Handlebars.registerHelper('if_eq', function(a, b, opts) {
    if(a == b) // Or === depending on your needs
        return opts.fn(this);
    else
        return opts.inverse(this);
});

然后调整模板:

代码语言:javascript
复制
{{#if_eq this "some message"}}
    ...
{{else}}
    ...
{{/if_eq}}

1)为什么他做的是{{#if_eq ..}}而不是{{#if if_eq .. }}

2)我还需要执行ELSE-IF,这是自工具栏3.0.0 (我有4.0)支持的。但是如果使用他的表示法,我就不能做{{#elseif_eq}}了--没有这样的表达式。如果使用此自定义帮助程序,我将如何实现一个helper IF?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-07 02:27:43

您的示例中的助手是块帮助器。该助手被恰当地命名为if_eq,因为它需要两个表达式,如果这些表达式相等,则呈现块中的内容。如果表达式不相等,return opts.inverse(this);行将完成呈现else块的工作(参见:helpers.html#conditionals)。

如果希望能够在模板中链接else if条件,则不能使用自定义块帮助器。相反,您必须使用常规(非块) 车把帮手。而块助手将呈现一个模板块,而常规帮助程序将返回一个值。在您的情况下,我们将返回一个布尔值,指示是否所有参数都相等。这样的帮手可能如下所示:

代码语言:javascript
复制
Handlebars.registerHelper('eq', function () {
    const args = Array.prototype.slice.call(arguments, 0, -1);
    return args.every(function (expression) {
        return args[0] === expression;
    });
});

您将以下列方式在模板中使用此助手:

代码语言:javascript
复制
{{#if (eq val1 val2)}}
    <p>IF Branch</p>
{{else if (eq val2 val3)}}
    <p>ELSE IF Branch</p>
{{else}}
    <p>ELSE Branch</p>
{{/if}}

请注意代码(eq val1 val2)中的括号。这些括号是必需的,因为我们的eq计算是#if表达式中的一个子表达式。括号告诉工具栏将等式检查的结果传递给#if块助手。

我已经创建了一个JS Fiddle供您参考。

更新

上面的答案指出,您不能使用else if链接块帮助程序。这是误导。事实上,if本身就是一个块助手;任意多个if块可以使用else关键字链接在一起。即使是不同的块帮手也可以用这种方式进行链接。

要回答海报上的第一个问题,最重要的一点是,两个助理员不能在同一个胡子里使用。也就是说,如果{{#if if_eq ... }}是块助手,那么if_eq是无效的。但是,使用if_eq是完全有效的,如下所示:

代码语言:javascript
复制
{{#if_eq this 'some message'}}
    <p>If branch.</p>
{{else if_eq this 'some other message'}}
    <p>Else if branch.</p>
{{else}}
    <p>Else branch.</p>
{{/if_eq}}

请看这个小提琴作为一个例子。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47681668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档