如何在Handlebars中无需each循环引用单个数据库商品数据?
解决Handlebars单个商品数据直接绑定问题
核心问题出在模板上下文的传递方式——你之前用{{#each itens}}循环列表,是因为后端传递的是包含商品数组的上下文;而单个商品页面需要传递单个商品对象作为模板的根上下文,或者明确指定对象路径来访问字段。
1. 确保后端传递单个商品对象
不管你用什么后端框架,查询到单个商品数据后,要把这个对象直接作为模板的渲染上下文,而不是包裹在数组或者外层对象里(除非你特意需要嵌套结构)。
举个Node.js/Express的例子:
// 从数据库获取单个商品数据 const produto = await ProdutoModel.findOne({ Codigo: req.params.codigo }); // 直接将商品对象传给模板 res.render('atualizar-produto', produto);
2. 模板中直接引用字段
此时模板的根上下文就是单个商品对象,你可以直接用{{Codigo}}、{{Nome}}等字段名绑定到表单value上:
<form method="POST" action="/produtos/atualizar"> <div> <label>商品编码:</label> <input type="text" name="Codigo" value="{{Codigo}}" readonly> </div> <div> <label>商品名称:</label> <input type="text" name="Nome" value="{{Nome}}"> </div> <div> <label>库存数量:</label> <input type="number" name="Estoque" value="{{Estoque}}"> </div> <button type="submit">保存更新</button> </form>
3. 如果上下文是嵌套结构的处理方式
如果后端必须把商品对象包裹在某个键下(比如{ produto: {...} }),那模板里需要通过键名逐层访问字段:
<input type="text" name="Nome" value="{{produto.Nome}}">
检查下你之前的代码,大概率是因为后端传递的还是数组或者嵌套对象,导致模板找不到{{Codigo}}对应的字段值,调整上下文传递方式就能解决问题。
内容的提问来源于stack exchange,提问作者grgrafa
相关产品推荐
相关产品推荐

