问题描述
struct Root{
as: Vec<A>,}
struct A {
bs: Vec<B>,cs: Vec<C>,}
struct B {
strings: Vec<String>,}
struct C {
strings: Vec<u32>,}
我正在尝试使用Rocket.rs和Handlebars模板获取输出。
我的车把模板当前看起来像这样,但是它不起作用。
{{#each as}}
{{#each bs}}
<h4>{{@index}}</h4>
<pre>{{bs.@index}}</pre>
<pre>{{cs.@index}}</pre>
{{/each}}
{{/each}}
我收到以下错误Error: Error rendering Handlebars template 'index' Error rendering "index" line 28,col 18: invalid digit found in string
,这可能与我在HBS标签中使用的@index
变量有关。
还有其他方法可以只从两个数组中取出一个项并将它们并排放置,而不必更改我的结构吗?
解决方法
我不清楚您要达到的目标。对于A
数组中的每个as
对象,您似乎要遍历bs
和cs
的每个元素。假设bs
和cs
对于任何A
具有相同的长度。
如果这是您想要的,那么我认为您的问题是您试图从cs
的上下文中访问bs
。在{{#each bs}}
块中,上下文是当前的B
对象。由于B
没有cs
,因此您需要提升上下文级别,以便返回到A
的上下文,该上下文包含bs
和cs
。在车把中,您change the context使用的路径是../
。
对于每个bs
,在cs
的每个索引处访问bs
和A
的简化模板是:
{{#each as}}
{{#each bs}}
<h4>{{@index}}</h4>
<pre>{{lookup ../bs @index}}</pre>
<pre>{{lookup ../cs @index}}</pre>
{{/each}}
{{/each}}
注意:我使用lookup helper进行bs
查找和cs
查找以保持一致性。但是,由于我们处于bs
的上下文中,因此可以简单地用.
引用它。如:
<pre>{{.}}</pre>
<pre>{{lookup ../cs @index}}</pre>
我创建了一个fiddle供您参考。