#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>
таблице. Спасибо за ответ и скрипку!