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

Handlebars嵌套循环/条件语句失效问题求助

解决Handlebars {{#each}}循环内无法访问外部变量的问题

问题核心是Handlebars的{{#each}}会切换上下文到当前循环的项(单个ngo对象),此时直接调用{{login}}会在当前ngo对象中查找该属性,而你的ngo数据里并没有login字段,导致条件判断失效。循环外能正常访问是因为上下文是你传递的整个根数据对象。

解决方案

修改循环内的条件判断,使用../访问上一级上下文,或者@root直接访问根上下文:

修改后的Handlebars模板代码

{{#each ngos}}
    <div class="card mt-4">
        <div class="card-body">
            <h4>{{name_ngo}}</h4>
            <small>Department: {{department}}</small><br>
            <small>Need: {{need}}</small><br>

            {{#if ../login}}
                <a href="/ong/{{id_ngo}}"><button class="btn btn-primary mt-4">Edit NGO</button></a>
                <a href="/delong/{{id_ngo}}"><button class="btn btn-danger mt-4">Delete NGO</button></a>
            {{/if}}
        </div>
    </div>
{{else}}
    <div class="alert alert-danger">{{error_msg}}</div>
{{/each}}

或者使用@root(更明确指向根上下文):

{{#if @root.login}}
    <!-- 按钮代码 -->
{{/if}}

原理说明

  • ../:表示当前上下文的上一级,也就是你通过res.render传递的整个数据对象(包含ngos和login的那个对象)。
  • @root:直接指向最顶层的根上下文,无论嵌套多少层循环都能访问根数据里的变量。

验证方式

可以在循环内临时添加{{../login}}或{{@root.login}},查看页面是否能正确输出login的布尔值,确认变量是否被正确访问。

内容的提问来源于stack exchange,提问作者Eduardo de Souza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:20:37