So I have an object that's structured like this:
menu = {
classic: [
{p1: ..., p2: ...}, {p1: ..., p2: ...}
],
classic2: : [
{p1: ..., p2: ...}, {p1: ..., p2: ...}
]
}
An object where each value is an array of objects. How do I use an handlebars #each
call to get to menu.classic[0].p1
, for example? Can I nest multiple #each
calls to iterate over every array index in every object value?
Use nested {{#each}}
blocks.
Here you will see both classic
and classic2
rendered into <ul>
s with corresponding p1
properties rendered into <li>
s using this approach.
The first example builds the menus imagining p1
holds a URL and p2
holds the text for the link. That each goes into an <a>
tag with in the <li>
.
let menu = { classic: [ {p1: 'URL1', p2: 'classic link1'}, {p1: 'URL2', p2: 'classic link2'} ], classic2: [ {p1: 'URL3', p2: 'classic2 link1'}, {p1: 'URL4', p2: 'classic2 link2'} ] }; const ul = ` <div> {{#each this}} <ul class="menu"> {{#each this}} <li><a href="{{this.p1}}">{{this.p2}}</a></li> {{/each}} </ul> {{/each}} </div>`; let template = Handlebars.compile(ul); console.log(template(menu));
<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
In a table:
let menu = { classic: [ {p1: 'classic test', p2: 'classic test'}, {p1: 'classic test', p2: 'classic test'} ], classic2: [ {p1: 'classic2 test', p2: 'classic2 test'}, {p1: 'classic2 test', p2: 'classic2 test'} ] }; const table = ` {{#each this}} <table> {{#each this}} <tr> {{#each this}} <td>{{this}}</td> {{/each}} </tr> {{/each}} </table> {{/each}}`; let template = Handlebars.compile(table); console.log(template(menu));
<script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.