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}}"> </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
(或只是隐式上下文)将是当前项,而在嵌套循环中, ../
将引用外循环中的当前项。
我正在尝试在当前 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}}"> </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
(或只是隐式上下文)将是当前项,而在嵌套循环中, ../
将引用外循环中的当前项。