Handlebars多#each循环中使用this取值及Express渲染问题
如何在Handlebars中正确显示MongoDB查询到的汽车拍卖信息
兄弟,你现在的问题根源在于把原本关联的汽车品牌、型号等字段拆成了独立数组,再用嵌套#each循环,这既破坏了数据的对应关系,也导致this无法正确获取你要的字段。咱们来一步步修正:
1. 简化Express端的数据处理
你完全没必要单独提取marqueauction、modelauction这些数组——因为你的democarauctions.results本身就是包含所有字段的对象数组,直接把它传给模板就好,省去多余的循环拆分:
const [democarauctions] = result; // 删掉那些单独提取marque、model的循环代码 res.render('demo', { results: democarauctions.results });
2. 修改Handlebars模板,用单循环替代嵌套循环
既然results里的每个元素都包含marque、model、model_year等完整字段,只需要一个#each循环遍历整个数组,就能直接访问每个元素的对应属性:
{{#each results}} <div class="results__container--box"> {{this.marque}} {{this.model}} {{this.model_year}} {{this.price_str}} <!-- 其他你需要显示的字段都可以这样直接访问 --> </div> {{else}} <div class="results__container--box"> <p>Aucun résultat d'enchères n'est disponible pour ce modèle.</p> </div> {{/each}}
为什么原来的方法行不通?
- 你拆分出来的
marqueauction和modelauction是两个独立的字符串数组,嵌套#each会让每个品牌和所有型号强行配对,完全不是你想要的“一条结果对应一个品牌+型号”的关系。 - 数组里的每个元素只是单纯的字符串(比如品牌名),根本没有
marqueauction或modelauction属性,所以{{this.marqueauction}}自然拿不到任何值。
如果之后你需要对某个字段做特殊处理(比如去重、格式化),直接在遍历democarauctions.results时给每个对象添加处理后的字段即可,不要拆成独立数组哦。
内容的提问来源于stack exchange,提问作者lf_celine
相关产品推荐
相关产品推荐

