如何设置Handlebars模板的默认参数?

Ben*_*Ben 6 javascript handlebars.js

我编写了一个插入链接的模板助手,非常简单.

Handlebars.registerHelper('link_to', function(href, title) {
    return new Handlebars.SafeString('<a href="/' + href + '">' + title + '</a>');
});
Run Code Online (Sandbox Code Playgroud)

它的用法如下:

{{ link_to 'articles' 'Articles' }}
Run Code Online (Sandbox Code Playgroud)

但是,如果href是自描述的,那么在第二个参数中指定大写版本似乎有点多余.因此,如果省略title参数,我想自动设置此行为.类似于以下内容:

Handlebars.registerHelper('link_to', function(href, title) {
    if (!title) {
        title = href.charAt(0).toUpperCase() + href.slice(1);
    }
    return new Handlebars.SafeString('<a href="/' + href + '">' + title + '</a>');
});
Run Code Online (Sandbox Code Playgroud)

然而,当{{ link_to 'articles' }}我刚刚获得渲染时[object Object].保留第二个参数并不是什么大不了的事,但我只是想知道是否有办法解决这个问题.

小智 7

Helpers接受一个可选的Hash作为其最终参数.如果模板没有提供散列参数,Handlebars将自动传递一个空对象({}).

[来自http://handlebarsjs.com/block_helpers.html ]

因此,当您在helpers参数列表中拥有title时,它将被视为Hash对象.您可以通过在控制台中记录标题来检查.因此,为了使代码工作,您可以使用typeof运算符检查标题类型是否为String.

if(!title || typeof title != 'String') {
    title = href.toString().charAt(0).toUpperCase() + href.slice(1);
}
Run Code Online (Sandbox Code Playgroud)

它应该工作.工作示例:http: //jsfiddle.net/prabhat_rai/ve4h39vm/