handlebars - 在两个条件下使用#if 助手

handlebars - using #if helpers with two conditions

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

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

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

此代码有重复代码显示数据。我仍在学习车把,不确定如何消除这个冗余代码块。你能帮我重构这个吗?谢谢!

我可能会通过向您的 isRequired 助手添加一个 isComplete 参数来解决这个问题。您还没有为您的助手提供代码,但我想它最终会看起来像这样:

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}}

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

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