私はPlayFrameworkを初めて使用しますが、新しい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」に変更し、単数形/複数形を使用してビューをパラメーター名と区別できることはわかっていますが、これは非常に簡単な解決策とは思えません。また、パラメータ名をビューパッケージと同じにしたい場合はどうすればよいですか?
私が持っているアイデアの1つは、すべてのビューに追加のトップレベルパッケージを追加することです。
app/views/views/item/details.scala.html
したがって、インクルード構文は@ views.item.details()になりますが、これも明らかにハックです。
この問題を回避するための良い方法は何ですか?このような名前の衝突を回避するために、コードをより適切に整理するにはどうすればよいですか?
他のほとんどのテンプレートエンジンは、「include」や「render」などの操作を使用して、部分的なインクルードを指定します。ここで誰かを怒らせるつもりはありませんが、Play Scalaテンプレートエンジンの構文は非常に簡潔なので、実際にコードの構成を決定しますか?