客户端+服务器端模板,对我感觉不对,如何优化?

在我正在制作的Web应用程序中,我使用经典的Express + Jade来呈现客户端页面,同时也暴露了一些REST API(比如:“user list API”)。

这些客户端页面使用提供的API来检索“用户列表”并显示它。 为了显示它,一旦数据被检索,我使用句柄模板库。

对我来说,这似乎有点肮脏,使用两个模板引擎,parsing代码两次,如何使它更好?

注意:我已经通过在客户端页面中插入一个脚本variables来发送初始数据,从而优化了这个function。 然后这个variables以API接收的数据显示。 该API仅用于数据刷新的情况。

更新:使用玉双方服务器和客户端是一个好主意,但如何分离/指定? 渲染模板中的哪个部分应该在服务页面的时候完成,哪个部分将被客户端使用?

这很容易使用客户端+服务器端模板。当我们正在构build一些Web应用程序时,我们应该使用ajax来获取一些数据,并使用callback函数来处理它。所以我们应该在客户端渲染这些数据。

问题是如何在客户端渲染它们?

现在我们只需要一个客户端的jade.js。

按照这个文件: https : //github.com/visionmedia/jade#readme

第一

git clone https://github.com/visionmedia/jade.git 

第二

 $ make jade.js ( in fact the project has already compile the file for us ) so we just need to copy this file to the path that we use. 

第三

 read my demo below : <script type='text/javascript' language='javascript' src="lib/jquery-1.8.2.min.js"></script> <script type='text/javascript' language='javascript' src="lib/jade/jade.js"></script> <script type='template' id='test'> ul li hello world li #{item} li #{item} li #{item} </script> <script> var compileText = $("#test").text(); console.log( typeof( compileText ) ); var fn = jade.compile( compileText , { layout : false } ); var out = fn( {item : "this is item " } ); console.log( out ); $("body").append( out ); </script> 

现在你可以在正文中看到输出结果

 hello world this is item this is item this is item 

看完这个演示后,我想你会知道如何分开玉器的服务器端和客户端。如果你能理解哪一个编译玉器模板,那么所有的问题都很容易。

也许你现在还有另外一个问题。如何在* .jade中编写一些jade模板代码?这个文档也为我们提供了一个方法来完成它。本教程可以帮助你。

index.jade

 !!!5 html head title hello world body ul#list script#list-template(type='template') |- for( var i in data ) | li(class='list') \#{ data[i].name } |- } 

index.js

 /* you javascript code */ var compileText = $('#list-template').text(); var compile = jade.compile( compileText , { layout : false } ); var data = [{ "name" : "Ben" } , {"name" : "Jack" } , {"name" : "Rose" }]; var outputText = compile( data ); $("#list").append( outputText ); 

几个星期前,我为Handlebars模板编写了一个npm包,以在客户端和服务器之间共享它们。 这是非常基本的,但到目前为止,它对我来说工作得非常好:

https://github.com/jwietelmann/node-handlebars-precompiler

编辑 :我分别使用“hbs”作为服务器端渲染的包。 只要我更新我的hbs视图,预编译器就会将预编译好的模板提供给我的公共javascripts目录。