在 Handlebars 中使用带有多个变量的“#each”

Posted

技术标签:

【中文标题】在 Handlebars 中使用带有多个变量的“#each”【英文标题】:Use of "#each" with multiple variables in Handlebars 【发布时间】:2019-10-24 02:18:07 【问题描述】:

当Handelbars中有多个#each时,如何用“this”“选择”一个值?

                #each marqueauction
                #each modelauction
                <div class="results__container--box">
                    this.marqueauction
                    this.modelauction
                </div>
                else
                <div class="results__container--box">
                    <p>Aucun résultat d'enchères n'est disponible pour ce modèle.</p>
                </div>
                /each
                /each

编辑:我想用 mongoose 调用我的 MongoDB 数据库并在盒子容器中显示结果。为此,我遍历了我的结果数组。

我的猫鼬模型:

const DemocarauctionSchema = new Schema(
    objectID: 
        type: Number
    ,
    cars_getroute: 
        type: String
    ,
    gm_url: 
        type: String
    ,
    "results":  type: [
        marque: 
            type: String
        ,
        model: 
            type: String
        ,
        model_year: 
            type: String
        ,
        price_str: 
            type: String
        ,
        prince_int: 
            type: Number
        ,
        price_currency: 
            type: String
        ,
        sold: 
            type: Boolean
        ,
        auction_house: 
            type: String
        ,
        auction_country: 
            type: String
        ,
        auction_date: 
            type: String
        ,
        auction_datetime: 
            type: String
        ,
        auction_url: 
            type: String
        ,
        image_urls: 
            type: String
        ,
        price_int_eu: 
            type: Number
        ,
    ]    

我在 Express/Node 中循环遍历数组:

const [democarauctions] = result;

        let marqueauction = [];
        for (let i = 0; i < democarauctions.results.length; i++) 
            marqueauction.push(democarauctions.results[i].marque)
        

        let modelauction = [];
        for (let i = 0; i < democarauctions.results.length; i++) 
            modelauction.push(democarauctions.results[i].model)
        
...

我在“res.render”中调用结果数组:

res.render(demo, 
            results: democarauctions.results,
            marqueauction: marqueauction,
            modelauction: modelauction,
            modelyearauction: modelyearauction,
            etc.)

现在我想在我的 html 多个框中呈现每个结果,每个结果中包含 marqueauction、modelauction、modelyearauction。我用车把。

【问题讨论】:

【参考方案1】:

最好避免使用this,而是使用命名block parameters:

#each marqueauction as |marque|
  #each modelauction as |model|
    <div class="results__container--box">
      marque
      model
    </div>
  else
    <div class="results__container--box">
      <p>Aucun résultat d'enchères n'est disponible pour ce modèle.</p>
    </div>
  /each
/each

我不确定您为什么要将原始集合拆分为多个集合,然后尝试在演示文稿中再次组合它们。直接使用结果即可。

编辑:根据您更新的问题:

#each results as |auction|
  <div class="results__container--box">
    auction.marque
    auction.model
  </div>
else
  <div class="results__container--box">
    <p>Aucun résultat d'enchères n'est disponible pour ce modèle.</p>
  </div>
/each

【讨论】:

谢谢,但我的错误是modelauction 没有嵌套在marqueauction 中,我不知道如何在同一级别上显示它们... 所以你有两个不相关的集合?我不明白“同一级别”。你能编辑你的问题并澄清一下吗? 不,它是同一个集合,但 modelauction 没有嵌套在 marqueauction 中。因此,当我尝试使用您的示例时,它不起作用(我认为这是问题所在)。很简单: "marqueauction": "Ferrari" "modelauction": "456" 而且我无法在容器框中显示它们 在您的问题中(不在 cmets 中),提供两个集合的示例和您想要生成的示例。否则,我无法真正理解您要完成的工作。

以上是关于在 Handlebars 中使用带有多个变量的“#each”的主要内容,如果未能解决你的问题,请参考以下文章

Django 模板中的 Handlebars.js

您可以在 css 文档中使用 handlebars.js 变量吗?

渲染 Marionette/Backbone 视图时将变量传递到 Handlebars 模板

Handlebars.Compile() 函数中的 C# 车把错误

服务器和客户端上带有 Handlebars.js 的 Node.js

在 Handlebars.js 辅助参数中连接字符串和变量的合理方法?