2017-08-01 7 views
0

のは、私は2つの項目を持つオブジェクトがあるとしましょう:ハンドルバーでハンドルアクセス変数に動的

state : { 'action-foo-collapsed' : 1, 'action-bar-collapsed': 1 }

を、私はキーがfoobarに対応して別のオブジェクトを反復処理しています。

私は、動的な方法で上記のようにオブジェクトにアクセスしたいと思い、このような何か:

{{#if @root.state['action-' @key '-collapsed']}}

は、カスタムヘルパーを使用せずに好適この達成可能、ですか?

答えて

1

動的パラメータの解決にはLookupビルトインヘルパを使用します。しかし、いくつかの文字列を連結してstateキーを作成したいので、あなたのケースはもう少し複雑です。 stateオブジェクトに他のオブジェクトと同じ同じキーがあった方が簡単です。上記は、私たちはifヘルパーにlookupヘルパーの結果を渡すことができますハンドルバー部分式を使用していること

{{#if (lookup @root.state @key)}} 

{{/if}} 

注:それはあなたが次のことを行うことができるようになります。

残念ながら、Handlebarsには文字列を連結するための組み込みヘルパーがありません。 stateオブジェクトのキーがの場合はと同じでなければなりません。これを連結するためのヘルパーを作成する必要があります。このようなヘルパーはかなり単純ですが、ここで私が思い付いたものです:私は、参考のため

{{#if (lookup @root.state (concat 'action-' @key '-collapsed'))}} 

{{/if}} 

を次のように

このヘルパーを使用して
Handlebars.registerHelper('concat', function() { 
    return Array.prototype.slice.call(arguments, 0, -1).join(''); 
}); 

、私たちはあなたのstateオブジェクトのキーにアクセスすることができますこの問題を解決するために上記の両方の方法を使用する例fiddleを作成しました。

+0

ありがとうございました。この解決策は実際には 'lookup'を使用しており、状態オブジェクト内で同じキーを使用していました。 – Rinux