【问题标题】:Handlebars custom if helper else is undefined如果 helper else 未定义,则自定义车把
【发布时间】:2020-02-14 17:54:39
【问题描述】:

我有一个自定义助手,如下:

Handlebars.registerHelper('hasAccess', function(val, fnTrue, fnFalse) { 
    return val > 5 ? fnTrue() : fnFalse();
});

还有我的模板,如下:

{{#hasAccess this.access}}
    You have access!
{{else}}
    You do not have access
{{/hasAccess}}

它可以工作,除了 fnFalse 未定义。那么,我应该如何渲染 'else' 分支?

【问题讨论】:

    标签: handlebars.js


    【解决方案1】:

    Handlebars 为自定义助手提供了一个对象,其中包含要应用的不同功能,options.fnoptions.inverse。见https://handlebarsjs.com/guide/block-helpers.html#conditionals

    你的助手可以写成

    Handlebars.registerHelper('hasAccess', function(val, options) {
        var fnTrue = options.fn, 
            fnFalse = options.inverse;
    
        return val > 5 ? fnTrue(this) : fnFalse(this);
    });
    

    还有一个演示

    Handlebars.registerHelper('hasAccess', function(val, options) { 
        var fnTrue = options.fn, 
            fnFalse = options.inverse;
            
        return val > 5 ? fnTrue() : fnFalse();
    });
    
    var template = Handlebars.compile($('#tpl').html() );
    $("body").append( "<h1>access : 1</h1>" );
    $("body").append( template({access:1}) );
    
    $("body").append( "<h1>access : 6</h1>" );
    $("body").append( template({access:6}) );
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.11/handlebars.min.js"></script>
    
    <script type='text/template' id='tpl'>
    {{#hasAccess this.access}}
        You have access!
    {{else}}
        You do not have access
    {{/hasAccess}}
    </script>

    【讨论】:

    • 完美答案。谢谢。我正在关注这个thinkvitamin.com/code/handlebars-js-part-2-partials-and-helpers。它一定是过时的。再次感谢。
    • 我正在使用 Ember.Handlebars.registerHelper(),但出现以下错误:Uncaught TypeError: options.inverse is not a function
    • 非常感谢您提供的示例,使它更容易理解。
    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2014-10-05
    • 2019-07-06
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多