我正在使用小胡子在服务器上渲染内容,但也在客户端上。策略是我有一个单页应用程序(在服务器上用胡子渲染),这个模板从服务器中提取片段并使用它们在客户端上渲染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-scalate 2.0.2和scala 2.9.0-1。
答案 0 :(得分:2)
您可以为您知道将填充客户端的数据使用备用分隔符。请参阅:Set Delimeter
服务器端模板:
<h1>{{title}}</h1>
<p> [[ client.name ]] - [[ client.description ]] </p>
服务器端数据:
{title : "Hello"}
将备用分隔符预先添加到呈现的服务器模板,然后呈现客户端。
var client_template = "{{=[[ ]]=}}" + server_rendered,
client_data = { client : { name : "Max", description : "world"}},
client_rendered = Mustache.render(client_template, client_data);
我做了a working jsFiddle to show it working。查看console.log以查看之前和之后的服务器模板。