Принятие нескольких аргументов в помощнике 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 @
Другие вопросы по тегам