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

Arn*_*uin 6 templating node.js express handlebars.js pug

在我正在制作的Web应用程序中,我使用经典的Express + Jade来呈现客户端页面,并且还公开了一些REST API(比方说:"用户列表API").

这些客户端页面使用提供的API来检索"用户列表"并显示它.要显示它,我会在检索数据后使用把手模板库.

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

注意:我已经通过插入脚本变量在客户端页面中发送初始数据来优化事物.然后,该变量的显示方式与API接收的数据的显示方式相同.API仅在数据刷新时使用.

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

Cas*_*李秉骏 4

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

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

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

请遵循此文档: https: //github.com/visionmedia/jade#readme

第一的

git clone https://github.com/visionmedia/jade.git
Run Code Online (Sandbox Code Playgroud)

第二

$ 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.
Run Code Online (Sandbox Code Playgroud)

第三

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>
Run Code Online (Sandbox Code Playgroud)

现在就可以在body中看到输出结果了

hello world
this is item
this is item
this is item
Run Code Online (Sandbox Code Playgroud)

看完这个demo我想你应该知道如何分离jade服务器端和客户端了。如果你能明白jade模板是由哪一个编译的,那么所有的问题就很容易了。

也许您现在还有另一个问题。如何在*.jade中编写一些jade模板代码?该文档还为我们提供了一种方法。这个教程可能会对您有所帮助。

索引.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 }
      |- }
Run Code Online (Sandbox Code Playgroud)

索引.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 );
Run Code Online (Sandbox Code Playgroud)