胸腺模板更易读

时间:2019-11-20 18:16:34

标签: templates thymeleaf

在过去的几周中,我同时使用html5和文本模式创建了许多Thymeleaf模板。在这些模板中,我需要使用许多th:each变量进行迭代的Context语句。

在这些变量上,我经常访问它们的getter,这些getter随后返回其他必须使用getter的对象,依此类推。 为了处理返回的数据,我需要应用strings.defaultString(...)

之类的东西

所有这些组合语句使阅读和理解正在发生的事情变得困难。我的模板的许多行很长,以至于如果不水平滚动就无法读取它们。

我搜索了最佳实践,但只发现了一些描述如何创建"base templates"的方法,这些方法给出了将Thymeleaf与Spring结合使用的一般建议,或者提到了如何包含common fragements

有没有最佳实践,如何格式化/包装Thymeleaf语句而不会对创建的html或文本造成负面影响(例如,不需要的换行符)?

1 个答案:

答案 0 :(得分:1)

您可以使用th:with创建变量,这样就不必频繁执行objA.propB.propC。因此,您分配了th:with="propB=${objA.propB}"

然后使用另一种好的方法来创建带有参数的可重用片段,以便将正在重复的任何HTML提取到片段中,并将该片段所需的数据作为参数传递。

更新:

<div class="profile-user-info">
    <th:block th:insert='~{::profileInfoRow("Name", ${user.name}) }' />
    <th:block th:insert='~{::profileInfoRow("Age", ${user.age}) }' />
    <th:block th:insert='~{::profileInfoRow("Location", ${user.location}) }' />
</div>

<div th:fragment="profileInfoRow(label, value)">
  <div class="profile-info-row">
    <div class="profile-info-name">[[${label}]]</div>
    <div class="profile-info-value">[[${value}]]</div>
  </div>
</div>

因此,以上是一种简单的方法,您可以创建HTML的可重用部分,然后使用thymeleaf指令通过传递动态参数的值来包含可重用部分。