如何在蒸汽叶中分配变量?

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。 是的,这也是我得出的结论。我最终创建了一个容器类,它为我的代码中的每个组件提供了选项。该组件提供了一个类型,基于此类型,您可以切换以在对象中获取正确的组件并使用正确的模板。我将这些容器放入一个数组并循环遍历它们并嵌入正确的叶子文件。

以上是关于如何在蒸汽叶中分配变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在选择查询中分配字符串变量

如何使用 Ruby 块在厨师食谱中分配变量

如何在 Smarty 修饰符函数中分配新变量?

如何防止声明为局部变量的对象在堆栈中分配?

如何在 IF 条件中分配一个变量,然后返回它?

如何在测试中使用在 beforeAll() 钩子中分配了值的变量