0

私の js ファイルでは、{'tests': tests, 'isComplete': isComplete} という 2 つのキーを持つ JSON オブジェクトを渡します。

handlebars ファイルで、各テスト ステータスに基づいてテスト オブジェクトを表示したいと考えています。同時に、isComplete が true でない場合にのみテストをチェックしたい「isRequired」という名前のヘルパーを追加した別の条件があります。

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

このコードには、データを表示するための重複したコードがあります。私はまだハンドルバーについて学んでいますが、この冗長なコード ブロックを削除する方法がわかりません。これをリファクタリングする方法を教えてください。ありがとうございました!

4

1 に答える 1

1

ヘルパーにisCompleteパラメーターを追加することで、おそらくこれを解決できます。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}}

この実装は、isの場合にのみisRequiredロジックを適用することに注意してください。これは、テンプレート コード サンプルに存在するものと同じルールです。ただし、これらのルールは、「isComplete が true でない場合にのみ」適用する必要があることを指定する質問のテキストと矛盾しているように見えます。これらが満たさなければならない要件である場合、新しいガード句から not 演算子を削除するだけで済みます。 isCompletetrueisRequired

 if (isComplete) { return options.fn(context); }
于 2016-07-26T03:07:34.563 に答える