EJS入门

30 篇文章 0 订阅

一、为什么用EJS

在web项目中渲染页面我们很多时候我们会用jstl或者直接采用拼接字符串的方式,前者不够灵活,在处理一些复杂问题的时候会显得难以下手,后者足够灵活,但是就像ejs官网说的,字符串拼接方式,会让整个代码很丑陋,还破坏原有的html结构,大量的html拼接会让代码难以阅读,解决问题的方式就是使用模板,ejs算是js模板中最简单的了,对于java程序员来说,学习ejs完全不需要时间,因为他实在是很简单,这也是个人比较喜欢的原因。下面对比拼接字符串方式和ejs模板方式

js拼接字符串的方式:

[javascript]  view plain  copy
  1. var html = "<h1>"+data.title+"</h1>"  
  2. html += "<ul>"  
  3. for(var i=0; i<data.supplies.length; i++) {  
  4.     html += "<li><a href='supplies/"+data.supplies[i]+"'>"  
  5.     html += data.supplies[i]+"</a></li>"  
  6. }  
  7. html += "</ul>"  
ejs模板方式

[html]  view plain  copy
  1. <h1><%= title %></h1>  
  2. <ul>  
  3.     <% for(var i=0; i<supplies.length; i++) { %>  
  4.         <li>  
  5.             <a href='supplies/<%= supplies[i] %>'>  
  6.                 <%= supplies[i] %>  
  7.             </a>  
  8.         </li>  
  9.     <% } %>  
  10. </ul>  

二、怎么用EJS

1.将一个模板定义为为.ejs 结尾的文件,模板内容就像上面那样,使用<%= %> 赋值,在<%%>中间是js代码,就像你平时写js一样

2.通过function EJS(options)创建一个EJS实例,其中options有如下属性

url:模板路径,通过ajax加载模板

text:模板String串,直接使用这个串作为模板

element{string or element}:当为String时表示dom元素的id,当为element时即document.getElementById('id')本身

name{string}:用来缓存模板,默认是DOM ID或者URL

cache:是否缓存,默认缓存

url、text、element分别为获取模板的三种途径,即ajax请求外部模板,js的String串,DOM的innerHTML

3.render(data)

new EJS({url: '/template.ejs'}).render(data)

4.update(element,url_or_data)

url_or_data是null时,返回一个function(obj)函数,其中obj是用来render模板的数据,

url_or_data是url时,通过ajax获取数据

url_or_data是data时,渲染数据

f = new EJS({url: '/mytemplate.ejs'}).update('my_element')

new EJS({url: '/mytemplate.ejs'}).update('my_element', '/data.json')

new EJS({url: '/mytemplate.ejs'}).update('my_element', {supplies:['mop']})

三、demo

新建一个index.html,内容如下:其中test.js是测试js

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4.     <meta charset="utf-8">  
  5.     <title></title>  
  6.       
  7. </head>  
  8. <body>  
  9.     <div  id="test">  
  10.           
  11.     </div>  
  12.   
  13. </body>  
  14. </html>  
  15. <script type="text/javascript" src="ejs.js"></script>  
  16. <script type="text/javascript">
  17.     var data={"list":[{"name":"张三","age":20},{"name":"李四","age":21}]};  
  18.     var options={ 
  19.       url:'template.ejs'  
  20.     }  
  21.     var html=new EJS(options).render(data);  
  22.     document.getElementById("test").innerHTML=html; 
  23. </script>  

1.第一种调用模板的方法,通过url请求模板,适用于多个页面共用一个模板

在同级目录下新建一个template.ejs文件,内容如下

[html]  view plain  copy
  1. <table>  
  2.     <thead>  
  3.         <th>姓名</th>  
  4.         <th>年龄</th>  
  5.     </thead>    
  6.     <tbody>  
  7.     <%for(var i=0;i<list.length;i++){var u=list[i];%>  
  8.         <tr>  
  9.         <td><%=u.name%></td>  
  10.         <td><%=u.age%></td>  
  11.         </tr>  
  12.     <%}%>  
  13.     </tbody>  
  14.   
  15. </table>  


2.第二种调用模板的方法,内部模板,通过element获取,如果这个模板只在此页使用

在index.html中添加以下模板,注意内部模板跟外部模板的区别

[html]  view plain  copy
  1. <script type="text/html" id="template">  
  2. <table>  
  3.     <thead>  
  4.         <th>姓名</th>  
  5.         <th>年龄</th>  
  6.     </thead>    
  7.     <tbody>  
  8.     [%for(var i=0;i<list.length;i++){var u=list[i];%]  //这里必须时[%%]否则会报错
  9.         <tr>  
  10.         <td>[%=u.name%]</td>  
  11.         <td>[%=u.age%]</td>  
  12.         </tr>  
  13.     [%}%]  
  14.     </tbody>  
  15. </table>  
  16. </script>  

[javascript]  view plain  copy
  1. var data={"list":[{"name":"张三","age":20},{"name":"李四","age":21}]};  
  2.     var options={  
  3.         element:"template"  
  4.     }  
  5.     var html=new EJS(options).render(data);document.getElementById("test").innerHTML=html;  

这里的element可以是值为模板id的string,也可以是element即为document.getElementById("template") 
  

3.第三种String串方式在js中声明的模板,不再说了

4.上面只说了render方法,update方法的使用如下

[javascript]  view plain  copy
  1. var data={"list":[{"name":"张三","age":20},{"name":"李四","age":21}]};  
  2.     var options={  
  3.         element:"template"  
  4.     }  
  5.     new EJS(options).update("test",data);  

[javascript]  view plain  copy
  1. var data={"list":[{"name":"张三","age":20},{"name":"李四","age":21}]};  
  2.     var options={  
  3.         element:"template"  
  4.     }  
  5.     var  template=new EJS(options).update("test");  
  6.     template(data)  

也可以直接通过url获取data

[javascript]  view plain  copy
  1. var options={  
  2.         element:"template"  
  3.     }  
  4.     new EJS(options).update("test","data.json");  

最终的结果都是一样的,如下


以上基本就是EJS的所有语法了,当然EJS还做了一些扩展



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/show_me_the_world/article/details/51945035
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值