javascript - 如何为 Handlebars 模板设置默认参数?

标签 javascript handlebars.js

我编写了一个模板助手,用于插入链接,非常简单。

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/

相关文章:

javascript - 如何在 Javascript 中随机移动表格周围的图像

javascript - 成功 requestStorageAccess() 调用后,Firefox Storage Access API 拒绝本地存储

javascript - 如何基于 JSON 响应类型 HandleBars 显示 Html DOM 元素

webpack - 将 .json 文件从 html-webpack-plugin 传递给 Handlebars 模板

Javascript function.prototype.apply() 使用字符串而不是 `this`

javascript - 通过 Javascript 访问 JSON 数组

javascript - 使用 Handlebars.js 创建响应式网格结构

javascript - TextArea 中的 For-Each 循环

ember.js - 如何在 Handlebars 模板中使用本地化字符串?

javascript - 如何将 div 包裹在多个相同类的元素周围