我编写了一个模板助手,用于插入链接,非常简单。
Handlebars.registerHelper('link_to', function(href, title) {
return new Handlebars.SafeString('<a href="/' + href + '">' + title + '</a>');
});
它的用法是这样的:
{{ link_to 'articles' 'Articles' }}
但是,如果 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>');
});
但是,当使用 {{ link_to 'articles' }}
呈现时,我只会得到 [object Object]
。保留第二个参数没什么大不了的,但我只是想知道是否有办法解决这个问题。
最佳答案
Helpers 接受一个可选的 Hash 作为它的最终参数。如果模板没有提供 hash 参数,Handlebars 将自动传递一个空对象 ({})。
[来自 https://handlebars-lang.github.io/docs/guide/block-helpers.html#hash-arguments ]
因此,当您在帮助程序参数列表中拥有 title 时,它被视为 Hash 对象。您可以通过在控制台中记录标题来检查。因此,为了让您的代码正常工作,您可以使用 typeof 运算符检查标题类型是否为字符串。
if(!title || typeof title != 'String') {
title = href.toString().charAt(0).toUpperCase() + href.slice(1);
}
它应该可以工作。工作示例: http://jsfiddle.net/prabhat_rai/ve4h39vm/
关于javascript - 如何为 Handlebars 模板设置默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26706213/