You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Handlebars中each循环内调用集合首个元素属性失效问题排查

问题分析与解决方案

嘿,这个问题我太熟了——本质是Handlebars的上下文作用域在搞鬼!

为什么循环内不显示,循环外正常?

当你用{{#each Flights}}的时候,Handlebars会把当前上下文切换到每一个迭代的Flight对象。也就是说,在循环内部,{{PassengerPricing.0.BaggageDescription}}是在尝试从当前的单个Flight对象里找PassengerPricing属性,但你的PassengerPricing显然是定义在Flights数组的上层上下文里(也就是循环外面的那个上下文),所以循环内自然找不到,也就显示不出来;而循环外的代码直接访问上层上下文的属性,所以正常工作。

怎么解决?

你需要明确告诉Handlebars,要从上层上下文或者根上下文去获取PassengerPricing,有两种常用方式:

  1. 使用../访问上层上下文
    ../在Handlebars里代表“跳出当前上下文,访问上一级的上下文”,修改后的循环代码如下:
{{#each Flights}}
  <tr>
    <td>
      <div class="col-md-10">
        <strong><span data-i18n="app.booking.flight-number"></span></strong>{{FlightNumber}}
        <strong>Bagaj:</strong>{{../PassengerPricing.0.BaggageDescription}}
      </div>
    </td>
  </tr>
{{/each}}
<strong>Bagaj1:</strong>{{PassengerPricing.0.BaggageDescription}}
  1. 使用@root访问根上下文
    如果你的PassengerPricing是在整个模板的根数据对象里,用@root会更稳妥(避免多层嵌套时../层级混乱),代码如下:
{{#each Flights}}
  <tr>
    <td>
      <div class="col-md-10">
        <strong><span data-i18n="app.booking.flight-number"></span></strong>{{FlightNumber}}
        <strong>Bagaj:</strong>{{@root.PassengerPricing.0.BaggageDescription}}
      </div>
    </td>
  </tr>
{{/each}}
<strong>Bagaj1:</strong>{{PassengerPricing.0.BaggageDescription}}

额外提示

如果你的PassengerPricing其实是每个Flight对象应该有的属性,那你需要检查数据源是否正确——是不是每个Flight里都没有填充PassengerPricing字段?这种情况下就要修复数据源,而不是调整模板语法了。

内容的提问来源于stack exchange,提问作者user1688401

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:17:32