2

我查遍了留言板,但没有找到答案。

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

例如:

{{#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 @
4

1 回答 1

1

AFAIKoptions将永远是最后一个论点。助手并没有完全记录或指定得很好,但我认为假设最后一个参数总是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 @
于 2015-01-30T19:57:18.423 回答