2

メッセージボード全体を確認しましたが、これに対する回答が見つかりませんでした。

私の目標は、渡されたすべての引数が true かどうかをチェックし、true の場合はコンテンツを表示するハンドルバー ヘルパーを作成することです。

例えば:

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

1 に答える 1

1

私の知る限り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 SzotifAnyは、ヘルパー名 ( ) が使用しているロジックと一致しないことを指摘しました。あなたのロジックは本当に呼び出され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 @
于 2015-01-30T19:57:18.423 に答える