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

如何在Vapor Leaf中分配变量?实现表格模板复用

你的思路完全可行,而且这正是Leaf模板实现复用的最佳实践之一,非常适合解决这种多数据结构适配的场景。

具体实现步骤:

  1. 修改Leaf模板,抽象数据引用
    把模板里所有page.table的引用替换成直接的table,让模板只关注表格本身的数据结构,不绑定到特定的页面数据路径:

    <div class="card shadow mb-4">
      <div class="card-header py-3">
        <h6 class="m-0 font-weight-bold text-primary">DataTables Example</h6>
      </div>
      <div class="card-body">
        <div class="table-responsive">
          <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
            <thead>
              <tr>
                #for(column in table.columns) {
                <th>#(column)</th>
                }
              </tr>
            </thead>
            <tfoot>
              <tr>
                #for(column in table.columns) {
                <th>#(column)</th>
                }
              </tr>
            </tfoot>
            <tbody>
              #for(row in table.rows) {
              <tr>
                #for(data in row.datas) {
                <td>#(data)</td>
                }
              </tr>
              }
            </tbody>
          </table>
        </div>
      </div>
    </div>
    

    (小提示:你原来的模板里有个笔误colums,改成column更规范哦)

  2. 在页面中嵌入模板时传递变量
    不管是原来的page.table还是新的page.grid.table,只要在嵌入模板时把对应的数据传递给table变量即可:

    • 原页面(使用page.table):
      #embed("your-table-template-name", table: page.table)
      
    • 新页面(使用page.grid.table):
      #embed("your-table-template-name", table: page.grid.table)
      

这个方案的优势:

  • 完全解耦:模板不再依赖页面的特定数据结构,只要传入的table包含columns和rows.datas结构,就能正常渲染。
  • 多场景复用:不仅支持这两个页面,以后任何有类似表格结构的数据,都可以直接复用这个模板。
  • 易于扩展:如果以后需要给表格加自定义配置(比如不同的ID、标题、样式类),可以给table结构体新增属性(比如table.id、table.title),然后在模板里引用,灵活性非常高。

有没有其他可选方案?

如果你的项目中需要更灵活的上下文传递,也可以使用Leaf的#set指令在嵌入前设置变量:

#set("table" = page.grid.table)
#embed("your-table-template-name")

但这种方式和直接传递参数的效果几乎一致,推荐用参数传递的方式,可读性更强,也更符合Leaf的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:12:53