我已经查看了留言板,但没有找到答案。
我的目标是创建一个 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/