把手 - 使用#if帮手有两个条件

时间:2016-07-25 04:29:35

标签: handlebars.js handlebarshelper

在我的js文件中,我传递了一个带有两个键的JSON对象 - {' tests&#39 ;: tests,' isComplete':isComplete}

在我的手柄文件中,我想根据每个测试状态显示测试对象。与此同时,还有另一个条件,我添加了一个名为' isRequired'只有当isComplete不为真时我想检查测试。

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

此代码具有重复的代码来显示数据。我还在学习把手,不知道如何消除这个冗余的代码块。你能帮我解释一下这个怎么重构吗?谢谢!

1 个答案:

答案 0 :(得分: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}}

请注意,仅当 isRequiredisComplete时,此实现才会应用true逻辑。这与模板代码示例中存在的规则相同。但是,这些规则似乎与您的问题文本相矛盾,该文本指定只有当isComplete不为真时才应用isRequired。如果这些是我们必须满足的要求,我们只需要从新的保护条款中删除not运算符:

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