1

我正在尝试在当前 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填充了报告的所有天数,我可以遍历它们以生成列标题。

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 种颜色中的哪一种按顺序应用于单元格:InEarlyAcccess、ReleaseDate、PostRelease 或默认颜色。

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

System.AggregateException:发生一个或多个错误。---> System.InvalidOperationException:序列包含多个元素

关于如何在两个数组不是父子数组时进行迭代的任何想法?

4

1 回答 1

1

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

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

于 2018-06-25T01:53:57.393 回答