Javascript 在把手辅助对象中接受多个参数

Javascript 在把手辅助对象中接受多个参数,javascript,coffeescript,handlebars.js,handlebarshelper,Javascript,Coffeescript,Handlebars.js,Handlebarshelper,我已经查看了所有留言板,但没有找到答案 我的目标是创建一个Handlebar助手,它将检查传递的所有参数是否为真,如果为真,则显示内容 例如: {{#ifAll data.something data.somethingElse data.oneMore}} Show me if all of these arguments exist! {{/ifAll}} 这是我最好的尝试——但我假设最后一笔财产将是期权财产,这有危险吗?有更好的方法吗 Handlebars.registerHelp

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

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

例如:

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

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 @

已指出您的助手名称(
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 @

这不正是
ifAll
的逻辑吗,而不是
ifAny
?@KamilSzot:是的,我想你是对的。我甚至没有注意到助手的名字。@KamilSzot谢谢你指出-我已经更新了question@Ben更新后的答案涵盖了所有内容,对吗?如果所有参数都存在,您不想显示内容,那么您的助手不应该被称为
ifAll
而不是
ifAny