一个循环中的三个阵列把手

问题描述

我有一个看起来像这样的Rust结构:

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对象,您似乎要遍历bscs的每个元素。假设bscs对于任何A具有相同的长度。

如果这是您想要的,那么我认为您的问题是您试图从cs的上下文中访问bs。在{{#each bs}}块中,上下文是当前的B对象。由于B没有cs,因此您需要提升上下文级别,以便返回到A的上下文,该上下文包含bscs。在车把中,您change the context使用的路径是../

对于每个bs,在cs的每个索引处访问bsA的简化模板是:

{{#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供您参考。