Руль управления тремя массивами в одном цикле

#rust #handlebars.js #rust-rocket

#Ржавчина #handlebars.js #rust-ракета

Вопрос:

У меня есть структура 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 , которая, вероятно, связана с @index переменными, которые я использую в тегах HBS.

Есть ли какой-либо другой способ, которым я мог бы получить только один элемент из двух массивов и разместить их рядом друг с другом без необходимости изменять мою структуру?

Ответ №1:

Мне непонятно, чего вы пытаетесь достичь. Похоже, что для каждого A объекта в as массиве, который вы хотели бы перебирать по каждому элементу bs и cs . Это предполагает, что bs и cs имеют одинаковую длину для любого A .

Если это то, что вы хотите, то я думаю, ваша проблема в том, что вы пытаетесь получить доступ к a cs из контекста a bs . Внутри {{#each bs}} блока контекстом является текущий B объект. Поскольку a B не имеет a cs , вам необходимо повысить уровень контекста, чтобы вернуться к контексту A , который содержит the bs и the cs . В Handlebars вы меняете контекст, используя путь, например ../ .

Упрощенный шаблон, который обращается к bs и cs к каждому индексу bs для каждого A , будет:

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

Примечание: я использовал помощник поиска как bs для поиска, так и cs для поиска согласованности. Однако, поскольку мы находимся в контексте bs , мы могли бы просто ссылаться на него . . Как в:

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

Я создал скрипку для вашей справки.

Комментарии:

1. Я даже не уверен, чего я пытался достичь сам, но из вашего ответа становится ясно, что это выполнимо. У меня было три массива одинакового размера, и я пытался отобразить их рядом в <td> таблице. Спасибо за ответ и скрипку!