车把三个阵列在一个循环中

Handlebars three arrays in one loop

我有一个看起来像这样的 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 变量有关。

有没有其他方法可以只从两个数组中取出一个项目并将它们并排放置而无需改变我的结构?

我不清楚你想要达到什么目的。对于 as 数组中的每个 A 对象,您似乎想要遍历 bscs 的每个元素。这假设 bscs 对于任何 A.

具有相同的长度

如果这是您想要的,那么我认为您的问题是您正试图从 bs 的上下文中访问 cs。在 {{#each bs}} 块中,上下文是当前的 B 对象。由于 B 没有 cs,您需要 step-up 上下文级别,以便您 return 到包含 A 的上下文=14=] 和 cs。在 Handlebars 中,您 change the context 使用路径,例如 ../.

在每个 Abs 的每个索引处访问 bscs 的简化模板将是:

{{#each as}}
    {{#each bs}}
        <h4>{{@index}}</h4>
        <pre>{{lookup ../bs @index}}</pre>
        <pre>{{lookup ../cs @index}}</pre>
    {{/each}}
{{/each}}

注意:为了保持一致性,我对 bs 查找和 cs 查找都使用了 lookup helper。然而,由于我们在 bs 的上下文中,我们可以简单地用 . 引用它。如:

<pre>{{.}}</pre>
<pre>{{lookup ../cs @index}}</pre>

我创建了一个fiddle供您参考。