我正在使用Scalate(特别是scaml,但格式有些不重要),并且我有许多在多个模板中定义的值。 这些变量在编译时并不总是已知。我的目标是在单个共享模板中定义它们,我将其作为其他模板的一部分包含在内(一种模板继承)。我也希望这些值被懒惰地实例化。所以我想要的是这样的:
globals.scaml:
- import mylib.DataProvider._
- lazy val name = get("name")
- lazy val address = get("address)
template.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中执行此操作?