handlebars.net 中 non-nested 个数组的嵌套循环

Nested Loops with non-nested arrays in handlebars.net

我正在尝试在当前 15 天到未来 60 天的范围内按天为热图构建车把模板。

这是我用于模板的模型

public class HeatMapDto
{
    public IEnumerable<HeatMapDateDto> HeatMapDates { get; set; }

    public IEnumerable<ProductDto> Products { get; set; }
}

这是我模板的相关部分

<table style='width: 2000px'>
    <tr>
        <th style='width: 100px'>Product</th>
        <th style='width: 100px'>EAStart</th>
        <th style='width: 100px'>Release</th>
        {{#each HeatMapDates}}
        <th style='width: 50px'>{{FormattedDate}}</th>
        {{/each}}
    </tr>
    {{#each Products}}
    <tr>
        <td>{{ProductName}}</td>
        <td>{{FormattedEarlyAccessStart}}</td>
        <td>{{FormattedReleaseDate}}</td>
        {{#each @root.HeatMapDates}}
        <td style="background-color:{{SelectCellColor DateValue EarlyAccessDate ReleaseDate '#747dff' '3d07ff' '#8cb871' '#e9fbff'}}{{/SelectCellColor}}">&nbsp;</td>
        {{/each}}
    </tr>
    {{/each}}
</table>

HeatMapDates 填充了报告的所有日期,我可以遍历它们以生成列 headers.

public class HeatMapDateDto
{
    public DateTime DateValue { get; set; }

    public string FormattedDate => DateValue.ToString("MM/dd");
}

public class HeatMapProductDto
{
    public string ProductName { get; set; }

    public DateTime? EarlyAccessStart { get; set; }

    public DateTime? ReleaseDate { get; set; }

    public string FormattedEarlyAccessStart => EarlyAccessStart?.ToString("MM/dd");

    public string FormattedReleaseDate => ReleaseDate?.ToString("MM/dd");
}

SelectCellColor 是我在我的代码中注册的处理程序,调用它时,三个日期未定义,上下文是 HeatMapDate。它的目的是确定传入的 4 种颜色中的哪一种应用于单元格:InEarlyAccess、ReleaseDate、PostRelease 或默认颜色,按此顺序。

如果我像这样执行外循环 {{#each product in Products}},Handlebars.Net 会抛出异常:

System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: Sequence contains more than one element

知道如何在两个数组不存在时迭代这两个数组吗?parent-child?

Handlebars 不支持 variableName in 语法,仅支持 #each enumerable 语法。

您仍然可以使用嵌套循环 - 每个块都会创建一个新的上下文,并且始终可以通过 ../ 访问父上下文。因此,在您的情况下,在外循环中 this (或只是隐式上下文)将是当前项,而在嵌套循环中, ../ 将引用外循环中的当前项。