Принятие нескольких аргументов в помощнике 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 @
1 ответ
Насколько мне известно options
всегда будет последним аргументом. Помощники точно не задокументированы и не указаны так хорошо, но я думаю, что вполне безопасно предположить, что последний аргумент всегда будет options
,
Тем не менее, вы можете сделать это немного чище в CoffeeScript, используя аргумент splat:
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 @