javascript - 在 Handlebars 助手中接受多个参数

标签 javascript coffeescript handlebars.js handlebarshelper

我已经查看了留言板,但没有找到答案。

我的目标是创建一个 handlebars 助手,它会检查传递的所有参数是否为真,如果是,则显示内容。

例如:

{{#ifAll data.something data.somethingElse data.oneMore}}
   Show me if all of these arguments exist!
{{/ifAll}}

这是我最好的尝试 - 但我假设最后一个属性将是 options 属性是否危险?有更好的方法吗?

Handlebars.registerHelper "ifAll", ->
    options = arguments[arguments.length - 1]
    for arg, i in arguments when i isnt arguments.length - 1
        return options.inverse @ if !arg
    options.fn @

最佳答案

AFAIK options 永远是最后一个参数。 Helpers 没有准确记录或指定得那么好,但我认为假设最后一个参数始终是 options 是非常安全的。

就是说,您可以使用 splat 参数在 CoffeeScript 中更简洁地执行此操作:

Handlebars.registerHelper "ifAny", (conditions..., options)->
    for condition in conditions
        return options.inverse @ if !condition
    options.fn @

或者也许:

Handlebars.registerHelper "ifAny", (conditions..., options)->
    for condition in conditions
        return options.inverse @ unless condition
    options.fn @

或者甚至:

Handlebars.registerHelper "ifAny", (conditions..., options)->
    return options.inverse @ for condition in conditions when !condition
    options.fn @

Kamil Szot已指出您的助手名称 (ifAny) 与您使用的逻辑不匹配。 ifAny 的逻辑实际上应该在一个名为 ifAll 的帮助器中,而 ifAny 应该是其中之一:

Handlebars.registerHelper 'ifAny', (conditions..., options)->
    for condition in conditions
        return options.fn @ if condition
    options.inverse @

Handlebars.registerHelper 'ifAny', (conditions..., options)->
    return options.fn @ for condition in conditions when condition
    options.inverse @

关于javascript - 在 Handlebars 助手中接受多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28243306/

相关文章:

oop - nextTick 在类中的用法

node.js - 使用 NPM 和 Node 安装 CoffeeScript

jquery - 如何确保 javascript 位于 express-handlebars 模板中代码的底部?

javascript - 文本/x- Handlebars 永远不会出现

netbeans - 如何在 Netbeans 中获得对 Handlebars 模板的最佳支持?

javascript - 切换div动画

javascript - 有没有办法使用 JavaScript 引入 Internet Explorer 条件注释?

javascript - 在 React/Javascript 中查找 Map 的第一个迭代

javascript - 方法参数声明中的 "colon"表示法之后可能会出现什么情况?

node.js - 我可以在不深入嵌套代码的情况下执行许多异步数据库请求吗?