我在Node.js中有一个使用Expressjs和Handlebars作为模板引擎的应用程序。
Expressjs使用布局,然后呈现视图。布局(layout.hbs)如下所示:
<!doctype html> <html lang="en"> <head> </head> <body> {{{body}}} </body> </html>
在{{{body}}}当您访问路径被替换服务器端的node.js内。例如:
{{{body}}}
app.get('/', function(req, res){ res.render('index'}) })
将{{{body}}}标记替换为index.hbs的内容。
现在,在客户端上,我正在使用Backbone.js,并希望对通过Backbone控制的视图使用Handlebars。问题在于,因为这些页面已经通过Handlebars呈现,所以当我尝试在其中使用Handlebars(或Handlebars中的Handlebars)时,它将不起作用。没有错误,只是不使用数据替换标签。
有没有人遇到过这个问题或有任何想法可以解决?
谢谢!
是的,这是一个棘手的问题—类似于shell脚本中的引用问题,这些问题变成了引用引号的老鼠巢。
我的解决方案是在expressjs(服务器端)中使用jade(la haml)为客户端输出基于车把的模板。这样,服务器使用一种语法(jade),而客户端使用另一种语法(handlebars)。我和你处在同一个十字路口,所以我面临着同样的挑战。
当然,翡翠不是必需的(尽管它已经为expressjs准备好了)。您可以为服务器选择任何(非把手)模板引擎,和/或可以将服务器上的把手与非把手模板在客户端上一起使用- 只要选择的模板引擎的两种语法不碰撞。由于我在客户端上使用emberjs,并且它使用了handlebars语法(默认情况下),因此我更喜欢在客户端上使用emberjs + handlebars语法。因此expressjs + jade成为服务器的自然选择。