我是 Play Framework 的新手,并且仍在尝试使用新的 Scala 模板引擎来解决一些问题。
假设我有以下包结构:
app/
app/controllers/Items.scala
app/models/Item.scala
app/views/layouts/page.scala.html
app/views/item/show.scala.html
app/views/item/details.scala.html //partial
这是我的项目/展示模板:
@(item: Item, form: Form[Item])(implicit flash: Flash)
@layout.page() {
@*want to include details partial, wont work due to item param*@
@item.details(item)
}
由于包含另一个模板(例如,包括上面的项目/详细信息)与访问模板参数(例如上面的项目)的语法完全相同,显然这种现有的命名约定在不进行更改的情况下将无法正常工作。
我知道我可以将我的“app.views.item”包重命名为“app.views.items”,并依靠单数/复数形式来区分视图和参数名称,但这似乎不是一个非常简单的解决方案。另外,如果我真的希望参数名称与视图包相同怎么办?
我的一个想法是在我所有的观点之前加上一个额外的顶级包:
app/views/views/item/details.scala.html
所以包含语法是@views.item.details(),但这显然是一个hack。
避免这个问题的好方法是什么?如何更好地组织代码以避免此类命名冲突?
大多数其他模板引擎使用诸如“包含”或“渲染”之类的操作来指定部分包含。我不想在这里冒犯任何人,但 Play Scala 模板引擎语法是否如此简洁以至于它实际上决定了代码的组织?