在Handlebars助手中接受多个参数

时间:2015-01-30 19:33:29

标签: javascript coffeescript handlebars.js handlebarshelper

我已经在留言板上查了一下,但没有找到答案。

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

例如:

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

这是我最好的准备 - 但我认为最后一个属性是选项属性是危险的吗?有更好的方法吗?

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 @

1 个答案:

答案 0 :(得分:1)

AFAIK options永远是最后一个参数。助手没有完全记录或指定,但我认为假设最后一个参数总是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的逻辑真的应该在名为ifAllifAny的助手中,应该是其中之一:

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 @