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

如何在Handlebars中利用触发模态框的按钮ID作为数组索引?

解决方案:通过Handlebars + JavaScript实现模态框显示对应数组项数据

我来帮你搞定这个问题~首先得明确一点:Handlebars是服务器端渲染的模板引擎,它没法直接处理客户端的点击交互,所以你要结合JavaScript来实现这个动态展示需求。

下面给你两种可行的实现方式:


方式一:通过按钮索引从全局数组取数据

步骤1:修改按钮,添加索引的data属性

把按钮代码改成这样,新增data-index="{{@index}}"来存储当前行对应的数组索引:

<button id="{{@index}}" name="button1" type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal" data-index="{{@index}}">View Application</button>

步骤2:把apps数组暴露给前端

在页面里加一段<script>,把服务器端的apps数组转成前端可访问的全局变量:

<script>
  // 用三重花括号避免Handlebars转义JSON里的特殊字符
  const apps = {{{JSON.stringify apps}}};
</script>

步骤3:监听模态框显示事件,动态更新内容

利用Bootstrap模态框的show.bs.modal事件,在模态框弹出前获取索引并替换内容:

$('#myModal').on('show.bs.modal', function (event) {
  // 获取触发模态框的按钮元素
  const triggerBtn = $(event.relatedTarget);
  // 从按钮的data属性里拿到数组索引
  const appIndex = triggerBtn.data('index');
  // 从全局数组里取出对应的app数据
  const targetApp = apps[appIndex];

  // 更新模态框里的内容,替换原来的静态模板
  $(this).find('.modal-body').html(`
    <input type="hidden" name="id" id="id" value="${appIndex}">
    <h3>Email:</h3>
    <p>${targetApp.owner.email}</p>
    <div class="modal-footer">
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    </div>
  `);
});

方式二:直接把需要的数据存在按钮的data属性里(更简洁)

如果你只需要显示邮箱这类单一数据,没必要暴露整个数组,直接把数据存在按钮的data属性里就行:

步骤1:修改按钮,添加邮箱的data属性

<button id="{{@index}}" name="button1" type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal" data-email="{{this.owner.email}}">View Application</button>

步骤2:监听模态框事件,直接取数据更新

$('#myModal').on('show.bs.modal', function (event) {
  const triggerBtn = $(event.relatedTarget);
  // 直接从按钮的data属性里拿到邮箱
  const userEmail = triggerBtn.data('email');
  const appIndex = triggerBtn.attr('id');

  $(this).find('.modal-body').html(`
    <input type="hidden" name="id" id="id" value="${appIndex}">
    <h3>Email:</h3>
    <p>${userEmail}</p>
    <div class="modal-footer">
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
    </div>
  `);
});

为啥不能直接用Handlebars的动态索引?

简单说,Handlebars是服务器端渲染——在页面发送给用户之前就已经把模板解析成静态HTML了,它没法预知用户之后会点击哪个按钮,所以动态的索引只能靠前端JavaScript在用户交互时实时处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:23:17