4

私は 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}

問題は、すべての vals を宣言する必要があり、遅延評価が得られないため、これは実際にはすべてのテンプレートで自分自身を繰り返すよりも悪いことです。

Scalate でこれを行う (独自のプリパーサーを作成せずに) 方法はありますか?

4

0 に答える 0