2016-07-25 7 views
0

とヘルパーの#if使用して、私は2つのキーを使用してJSONオブジェクトを渡す - {「テスト」:テスト「isComplete」:isComplete}ハンドルバー - 私のjsファイルで二つの条件

私のハンドルファイルで、私が欲しいです各テストステータスに基づいてテストオブジェクトを表示する。同時に、isCompleteが真でない場合にのみテストをチェックしたいという、isRequiredというヘルパーを追加した別の条件があります。

{{#if isComplete}} 
{{#each tests}} 
    {{#isRequired this}} 
     // display data 
    {{/isRequired}} 
{{/each}} 
{{else}} 
{{#each tests}} 
    // display data 
{{/each}}{{/if}} 

このコードにはデータを表示するコードがあります。私はまだハンドルバーを習っていて、この冗長なコードブロックをどのように排除するかはわかりません。私がこれをどのようにリファクタリングできるか教えてもらえますか?ありがとうございました!

答えて

1

パラメータをisRequiredヘルパーに追加することで、これを解決できます。あなたはヘルパーのコードを提供していないが、私はそれがこのような何かを探して終わるだろうと想像:

Handlebars.registerHelper('isRequired', function (context, isComplete, options) { 
    if (!isComplete) { return options.fn(context); } 
    /* rest of isRequired implementation here */ 
}); 

次のようにあなたのテンプレートが更新されます。この実装は適用されること

{{#each tests}} 
    {{#isRequired this ../isComplete}} 
     // display data 
    {{/isRequired}} 
{{/each}} 

注意をisRequired論理のみの場合isCompletetrueです。これはテンプレートコードのサンプルと同じ規則です。しかし、これらのルールは質問のテキストと矛盾しているように見えますが、isRequiredは「isCompleteが真でない場合にのみ」適用する必要があります。これらの条件を満たす必要がある場合は、新しいガード句からnot演算子を削除するだけで済みます。

if (isComplete) { return options.fn(context); } 
+0

これは助けになりました。 ../入れ子にされた道は私が気づいていなかったものでした。ありがとう!! – Lynn