我正在使用 Scalate(特别是 scaml,但格式有点不重要),并且我有许多跨多个模板定义的值。 这些变量在编译时并不总是已知的。 我的目标是在一个共享模板中定义它们,我将其作为其他模板的一部分(某种模板继承)。我还希望这些值被延迟实例化。所以我想要的是这样的:
globals.scaml:
- import mylib.DataProvider._
- lazy val name = get("name")
- lazy val address = get("address)
模板.scaml:
= include("globals.scaml")
The address for #{name} is #{address}
我已经搞砸了各种方案,包括将其反转,以便 globals.scaml 在传递一些变量的同时加载正确的模板,如下所示:
globals.scaml:
-@ val template: String
- import mylib.DataProvider._
- val data = Map("name" -> get("name"), "address" -> get("address))
- render(template, data)
但这仅在我实际上也在模板中声明 val 时才有效,如下所示:
-@ val name:String
-@ val address:String
The address for #{name} is #{address}
问题是这实际上比在每个模板中重复自己更糟糕,因为我仍然必须声明所有的 val,而且我没有得到懒惰的评估。
有没有办法(无需编写我自己的预解析器)在 Scalate 中执行此操作?