如何在蒸汽叶中分配变量?
Posted
技术标签:
【中文标题】如何在蒸汽叶中分配变量?【英文标题】:How to assign variable in Vapor leaf? 【发布时间】:2020-01-19 13:52:49 【问题描述】:我有一个寺庙,它使用代表所有数据的结构来呈现表格。
模板如下所示。
<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" cellspacing="0">
<thead>
<tr>
#for(colums in page.table.columns)
<th>#(colums)</th>
</tr>
</thead>
<tfoot>
<tr>
#for(colums in page.table.columns)
<th>#(colums)</th>
</tr>
</tfoot>
<tbody>
#for(row in page.table.rows)
<tr>
#for(data in row.datas)
<td>#(data)</td>
</tr>>
</tbody>
</table>
</div>
</div>
</div>
对于这种情况,这是可行的。但是,假设在另一页中我有不同的数据结构。所以不是page.table
而是page.grid.table
我怎么还能使用这个模板?
我最初的想法是更改模板,使用table.columns
而不是page.table.columns
,然后在嵌入模板之前“分配”表变量。这样,如果您愿意,您也可以拥有多个表,只需在嵌入之前重新分配table
。
我对网络开发不是很有经验,所以也许我只是想错了。
【问题讨论】:
【参考方案1】:如果你使用条件来检查变量是否存在,这相当简单。
#if (page.table != nil)
#for(row in page.table.rows)
<tr>
#for(data in row.datas)
<td>#(data)</td>
</tr>>
else
#for(row in page.grid.table.rows)
<tr>
#for(data in row.datas)
<td>#(data)</td>
</tr>>
这只是一个例子,你可以把代码多一点,但基数相同,检查变量是否存在,然后使用它。
编辑:例如,您可以使用存储相同类型变量的 Wrapper 类。在上面的代码中,你有一个我猜字符串的矩阵,你可以做这样的事情:
class Wrapper: Content
let table: [[String]]
init(table: [[String]])
self.table = table
然后如果你有 page.table 你把它转换成包装器,比如:
let wrapper = Wrapper(table: page.table)
// Or if you have page.grid.table
let wrapper = Wrapper(table: page.grid.table)
并像这样在 Vapor Leaf 中使用它:
#for(row in wrapper.table)
<tr>
#for(data in row.datas)
<td>#(data)</td>
</tr>>
【讨论】:
我知道你可以这样做,但这并不能解决我的问题。我想要做的是在同一页面中重复使用相同的模板,但使用不同的数据。因此,假设您在一页上有两个表格,或者在一页上有两个或多个表格。这是一个更好的例子:for(profile in profiles) #embed("profile", profile)
这可能吗?
好吧,在这种情况下,您可以使用 Wrapper,创建一个可以存储相同类型信息的类,并将您的 2 种类型的数据转换为该 Wrapper。
是的,这也是我得出的结论。我最终创建了一个容器类,它为我的代码中的每个组件提供了选项。该组件提供了一个类型,基于此类型,您可以切换以在对象中获取正确的组件并使用正确的模板。我将这些容器放入一个数组并循环遍历它们并嵌入正确的叶子文件。以上是关于如何在蒸汽叶中分配变量?的主要内容,如果未能解决你的问题,请参考以下文章