2012-01-26 62 views
2

我在服务器端使用node.js/ejs,在客户端使用backbone.js。 服务器端和客户端都使用相同的模板样式。 所以问题是,如果我把模板代码放在模板里面的客户端,它仍然会在服务器端被解析。如何在客户端评估node.js中的EJS模板代码?

如果发现了这样的工作:

<%- "<%= done ? 'done' : '' %\>" %> 

但是,恕我直言,这uglifies代码的方式,这使得使用模板无用的整点。

你会如何处理这个?

有没有一种方法来定义的内部EJS模板的代码块没有得到解析像{}文字在其他模板语言 - 标签使用?

更新:现在我使用backbone的_.templateSettings在客户端使用不同的分隔符。

更新:下面是在JSP背景类似的解决方案:Underscore.js Templates Within JSP

+0

模板中的模板听起来像是一个错误的例子。 – Raynos

回答

2

我处理这个问题的方法是重写开始和结束标记在节点以便EJS的2个实例为lookgin不同的标签。

在节点您可以在选项

{open:'<%',close:'%>'} 

在我来说,通过我用我的两个版本<%和< @。然后,在节点EJS模板我有这样的事情(其中名称为骨干和everyauth显然从节点):

<% if(everyauth.loggedIn) %><h1><@= name @></h1><% } %> 
0

好吧,那我现在处理这个是用require.js与文本插件的方式;这允许我在开发期间使用AJAX包含模板,并在部署期间将它们全部编译为优化/缩小的单个文件包。

当然,如果你不使用require.js为您的JS代码,其余的依赖管理,这并不工作几乎一样好,但我不能忍受离不开require.js的JavaScript开发了无论如何,现在我已经习惯了。

或者,有可能是因为你可以用它来解决同样的问题其他类似的技术。

0

我在客户端和服务器端使用backbone.layout.manager,因为我希望我的模板是完全相同。

我解决了模板定界符问题的办法是使服务器端的页面,然后注入原始骨干模板。

0

有了新EJS你可以在客户端添加自定义分隔符:

https://github.com/mde/ejs#custom-delimiters

如:

自定义分隔符可以在每个模板的基础应用,或全球:

var ejs = require('ejs'), 
    users = ['geddy', 'neil', 'alex']; 

// Just one template 
ejs.render('<?= users.join(" | "); ?>', {users: users}, {delimiter: '?'}); 
// => 'geddy | neil | alex' 

// Or globally 
ejs.delimiter = '$'; 
ejs.render('<$= users.join(" | "); $>', {users: users}); 
// => 'geddy | neil | alex'