如何将Handlebars循环外的博客ID传递到each循环内的表单中
Handlebars循环内访问外层变量解决方案
Handlebars 中{{#each}}遍历块会切换当前上下文到正在遍历的子项,所以默认无法直接访问外层作用域的变量,你可以通过../操作符回溯父级作用域获取外层的blogs._id,具体修改方式如下:
实现方案
方式1:将博客ID拼接在请求路径中
直接修改删除评论表单的action属性,通过路径参数传递博客ID:
<!-- 在{{#each blogs.comments}}块内 --> <form method="POST" action="/admin/delete-comment/{{../blogs._id}}">
后端可将路由配置为/admin/delete-comment/:blogId,直接从路径参数中提取博客ID,配合表单提交的邮箱参数即可匹配到要删除的对应评论。
方式2:通过隐藏表单字段传递参数
如果不想把参数放在URL路径中,可以在表单内新增隐藏的输入字段传递博客ID:
<!-- 在{{#each blogs.comments}}块内 --> <form method="POST" action="/admin/delete-comment"> <!-- 新增隐藏字段传递外层博客ID --> <input type="hidden" name="blogId" value="{{../blogs._id}}"> <div class="form-group"> <label for="exampleInputEmail1"></label> <input type="email" class="form-control" id="myInput" readonly aria-describedby="emailHelp" placeholder="Enter email" value="{{this.email}}" name="email"> </div> <button type="submit" class="btn btn-danger">delete</button> </form>
后端直接从POST请求的请求体中获取blogId和email两个参数,即可完成精准删除。
补充说明:
../是Handlebars的父级作用域访问符,如果存在多层嵌套的块级作用域,可以叠加使用../向上回溯对应的层级获取目标变量。
内容的提问来源于stack exchange,提问作者ʙɪᴍᴀʟ ʙᴏʙy
相关产品推荐
相关产品推荐

