最近项目中需要在后端使用的jade模板里包含前端用的underscore模板,最终写成下边这样:
script(type="text/template")#template
table.table
| <%var keys=Object.keys(item);_.forEach(keys,function(name,index){%>
tr
td <%=name%>
td <%=item[name]%>
| <%})%>
所有涉及underscore模板的地方,比如`<%`,`%>`包裹的内容(js代码),都需要作为字符串直接输出
而其他的内容,如果是标签,还是可以利用jade来编译的,主要注意缩进级别。
这样的混合,最开始很难理解。
这其是一个关于字符串拼接的事。
通常写nodejs做web服务器时,会选择一种模板语言,而前端在需要动态生成内容时,也会选择一种模板。
这时如何让后端模板与前端模板同时存在,输出时,如何只编译后端模板就是个问题了。
如果后端模板与前端模板相同,这种事情更难处理。因为后端在渲染时,需要知道哪些是需要后端处理哪些是前端处理是很难分清的。
用过Php smarty模板的同学都遇到过`{}`大括号的问题,可以通过转义,或者设置另一种不常用的开始结束标记来解决。这需要模板支持设置标记才可以。