45

您将如何更改以下代码以使其正常工作?问题是 this == 'some message' 表达式:

<ul>
  {{#each errors}}
    {{#if (this == 'some message') }}
    <li>Status</li>
    {{else}}
    <li>{{this}}</li>
    {{/if}}
  {{/each}}
</ul>
4

3 回答 3

95

最简单的事情是添加一个自定义if_eq助手:

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);
});

然后调整您的模板:

{{#if_eq this "some message"}}
    ...
{{else}}
    ...
{{/if_eq}}

演示:http: //jsfiddle.net/ambiguous/d4adQ/

如果您的errors条目不是简单的字符串,那么您可以向它们添加“这是一些消息”标志并使用标准{{#if}}(请注意,将属性直接添加到字符串不会很好):

for(var i = 0; i < errors.length; ++i)
    errors[i] = { msg: errors[i], is_status: errors[i] === 'some message' };

和:

{{#if is_status}}
    <li>Status</li>
{{else}}
    <li>{{msg}}</li>
{{/if}}

演示:http: //jsfiddle.net/ambiguous/9sFm7/

于 2013-02-26T17:05:04.960 回答
11

老问题,但如果你使用 Elving 的Swag Handlebars 助手库,你可以使用助手isisnt.

于 2014-03-07T09:44:12.527 回答
7

这也可以通过使用 Handlebars Subexpressions来实现。

模板 -

    <script id="tmplStatus" type="text/x-handlebars">
        <ul>
            {{#each errors}}
                {{#if (is_status this 'some message')}}
                    <li>Status</li>
                {{else}}
                    <li>{{this}}</li>
                {{/if}}
            {{/each}}
        </ul>
    </script>

Javascript -

var errors = [
        'Where is pancakes house?',
        'some message',
        'One cent stamp'
    ];

    Handlebars.registerHelper('is_status', function(msg, matchMsg, options) 
    {
        if(msg === matchMsg)
            return true;
        else
            return false;
    });

    var tmplStatus = Handlebars.compile($('#tmplStatus').html()),
        domStatus = tmplStatus({ errors: errors });
    $('body').append(domStatus);

工作演示:http: //jsfiddle.net/techgeeek/b99qwtpw/

于 2015-09-30T08:41:53.380 回答