サーバーだけでなくクライアントでもレンダリングするために口ひげを使用しています。戦略は、シングルページアプリ(サーバー上で口ひげを使用してレンダリング)を使用し、このテンプレートがサーバーからスニペットを取得し、それらを使用してクライアント上でもjsonをレンダリングすることです。
ここで問題はテンプレートにあります。サーバーでラベルをレンダリングしたいのですが、クライアントでレンダリングするために口ひげの構文をいくつか残しておきます。次のようなテンプレートがあるとしましょう。
<html>
<head><title>{{label.title}}</title></head>
<body>
<h1>{{name}}</h1>
<p>{{description}}</p>
</body>
</html>
サーバー側のレンダリングはラベルを埋めますが、コンテキストに表示されていないプレースホルダーも削除します。
<html>
<head><title>Ze zjerman title</title></head>
<body>
<h1></h1>
<p></p>
</body>
</html>
Scalateに接続してこれを回避する方法はありますか?私は素朴に逃げようとしました:
templateEngine.layout(path, Map(attributes:_*).withDefault((key)=>"{{"+key+"}}"))
...しかし、マップがループを介して処理されるとすぐに破棄されることは明らかです(たとえば、TemplateEngineの576行目)。このための適切なプラグポイントはどこにありますか?
RenderContextでnoneStringとnullStringも見つけましたが、これらの変数は単なる文字列であるため、レンダラーにキーを出力させることはできないと思います...
私はscalatra-scalate2.0.2とscala2.9.0-1を使用しています。