html

<div id="tem1"></div>
<div id="tem2"></div>
<!--可以使用textarea定义模板 使用css display none 并且用id来标示-->
<textarea id="t:myTem3" style="display: none;">
<h3>title:<%=title%></h3>
<%if(list.length>0){%>
<ul>
<!--循环语句for-->
<%for(var i=0; i< list.length;i++){%>
<li><%=list[i].name%></li>
        <%}%>
       </ul>
   <%}else{%>
      <div>没有数据!</div>
  <%}%>
</textarea>
<div id="tem3"></div>

template

<!--可以使用script标签 type='text/html' 来定义模板,并且用id来标示-->
<script type="text/html" id="t:myTem1">
<!--语法均为javascript的原生语法,默认分隔符是<% %>也可以自定义-->
<%* 输出变量语句 <%=%> 等号不要忘记了!!!!!*%>
<h3>title:<%=title%></h3>
<%if(list.length>0){%>
<ul>
<!--循环语句for-->
<%for(var i=0; i< list.length;i++){%>
<li><%=list[i].name%></li>
<%}%>
</ul>
<%}else{%>
<div>没有数据!</div>
<%}%>
</script>
<!--可以使用使用字符串定义模板 并且用id来标示-->
<script type="text/javascript" id="t:myTem2">
var tmp2='<h3>title:<%=title%></h3>\
<%if(list.length>0){%>\
<ul>\
<%for(var i=0; i< list.length;i++){%>\
<li><%=list[i].name%></li>\
<%}%>\
</ul>\
<%}else{%>\
<div>没有数据!</div>\
<%}%>';
</script>

使用模板

<!--使用模板-->
<script type="text/javascript">
var data={
title:"this is my baiduTemplate",
list:[
{name:'zhangSan'},
{name:'liSi'},
{name:'wangWu'},
{name:'zhaoLiu'},
{name:'zhaoLiu2'}
]
}
/*使用baidu.template 的命名空间*/
var bt=baidu.template;
/*最简单的使用方法*/
/*传入模板的id*/
var html=bt('t:myTem1',data);//或者直接使用 varhtml=baidu.tempalte('t:myTem1',data);
/*传入模板字符串*/
var html2=bt(tmp2,data);
/*可以先传入模板id,不传入id,返回的是模板函数*/
var fun=bt('t:myTem3');
/*然后传入data生成不同的HTML片断*/
var html3=fun(data);
document.getElementById("tem1").innerHTML=html;
document.getElementById("tem2").innerHTML=html2;
document.getElementById("tem3").innerHTML=html3;
</script>

总结:

1 定义模板 使用script type为 text/html或者text/template  需要使用id标示   火或者存放在textarea中,使用css dispaly none; 使用id标示

demo

<script id='test1' type="text/template">
<!-- 模板部分 --> <!-- 模板结束 -->
</script>
<script id='test2' type="text/html">
<!-- 模板部分 --> <!-- 模板结束 -->
</script>
<textarea id='test3' style='display:none;'>
<!-- 模板部分 --> <!-- 模板结束 -->
</textarea>

模板也可以直接存储在一个变量中

var tpl = "<!-- 模板开始 --> 模板内容 <!-- 模板结束 -->";

2 分隔符为<%%>

3 直接输出变量 <%= arg%>

4 使用js语法 需要使用<%%>分隔符与html语句分隔开

5 使用baiduTemplate  使用变量接收baidu.template 的命名空间

  baiduTemplate 占用baidu.template 命名空间

  可以赋值给一个短名变量使用

  var bt=baidu.template;

6 使用原生的javascript

7 调用引擎的方式   数据结构是一个JSON

8 生成对应的html片断      tpl是传入的模板类型,可以是模板id,可以是一个模板片断字符串,传入模板和对应的数据返回对应的HTML片断

  

//方法一:直接传入data,返回编译后的HTML片段
var html0 = baidu.template(tpl,data); //或直接传入id即可
var html0 = baidu.template('test1',data);

或者可以只传入tpl,这时返回的是一个编译后的函数,可以把这个函数缓存下来,传入不同的data就可以生成不同的HTML片段

//方法二:先不传入data,返回编译后的函数
var fun = baidu.template(tpl);
//或直接传入id即可
var fun = baidu.template('test1'); //之后通过改变数据,调用缓存下来的函数,产生不同的HTML片段
var html1 = fun(data1);
var html2 = fun(data2);

最后将他们插入到一个容器中即可

document.getElementById('result0').innerHTML=html0;
document.getElementById('result1').innerHTML=html1;
document.getElementById('result2').innerHTML=html2;
模板基本语法(默认的分隔符是<%%>,也可以是自定义)
分隔符内语句为js语法,如:
<%
  var test=function(){//函数体}
  if(){}else{}
function testFun(){
  return;
}
%>

注释:

<!-- 模板中可以使用HTML注释--> 或者<%*这是模板自带的注释格式*%>

<% //分隔符内部支持js注释%>

输出一个变量

 /%*输出一个变量 *%/
<!--默认html转义,如果变量未定义,输出为空-->
<%=title%>或者<%:h=title%>
<!--不转义-->
<%:=title%> 或者是 <%-title%>
//url转义 UI变量使用在模板链接地址URl的参数中时,需要转义
<%:u=title%>
<!--UI变量使用在HTML页面标签onclick等事件函数参数中需要转义-->
//“<”转成“&lt;”、“>”转成“&gt;”、“&”转成“&amp;”、“'”转成“\'”
//“"”转成“\&quot;”、“\”转成“\\”、“/”转成“\/”、\n转成“\n”、\r转成“\r”
<%:v=title%>

判断语句

<%if(list.length>0)%>
<div><%=list.length%></div>
<%else{%>
<div>list的长度为0</div>
<%}%>

循环语句

<%for(var i=0; i< list.length; i++){%>
<li><%=list[i].name%></li>
<% }%>

用户自定义分隔符   默认是<%%>    -------不推荐使用

//设置左分隔符为 <!
baidu.template.LEFT_DELIMITER='<!'; //设置右分隔符为 <!
baidu.template.RIGHT_DELIMITER='!>';

自定义默认输出变量是否自动HTML转义--------不推荐使用

//设置默认输出变量是否自动HTML转义,true自动转义,false不转义
baidu.template.ESCAPE = false;

10 对于不存在的数据,baiduTemplate做了很好的处理,使用空字符串来代替,而不是undifined这样的对象未定义

也可以把模板抽到一个文件中,需要时再使用demo
tem.html
<!--可以使用使用字符串定义模板 并且用id来标示-->
<h3>tmp:title:<%=title%></h3>
<%if(list.length>0){%>
<ul>
<%for(var i=0; i< list.length;i++){%>
<li><%=list[i].name%></li>
<%}%>
</ul>
<%}else{%>
<div>没有数据!</div>
<%}%>

主页面 html

<div id="tem"></div>

主页面 js


var data={
title:"this is my baiduTemplate\\",
list:[
{name:'zhangSan'},
{name:'liSi'},
{name:'wangWu'},
{name:'zhaoLiu'},
{name:'zhaoLiu2'}
]
}
$.ajax({
url:'templates/tem.html',
dataType:'html',
success:function(tmp){
var html=bt(tmp,data);
document.getElementById("tem").innerHTML=html;
} });

ajax获取模板页面,在success中渲染页面。


参考1   http://baidufe.github.io/BaiduTemplate/

baiduTemplate 基本知识总结的更多相关文章

  1. 你必须知道的EF知识和经验

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  2. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  3. 学点HTTP知识

    不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊.平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问题,光看是没有用的,需要实践.看别人说的 ...

  4. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  5. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  6. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

  7. [C#] C# 知识回顾 - 学会使用异常

    学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...

  8. [C#] C# 知识回顾 - 异常介绍

    异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...

  9. [.NET] C# 知识回顾 - Event 事件

    C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...

随机推荐

  1. [luoguP2073] 送花(set)

    传送门 set #include <set> #include <cstdio> #include <iostream> #define LL long long ...

  2. ArrayList去除重复元素

    去除一个ArrayList的重复元素有两种方法:(ArrayList与Vector的存储结构是Object[],LinkedList是双向列表) 第一种是不需要借助临时list,用equals方法比较 ...

  3. php装饰者模式

    php装饰者模式 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 示例: A.B.C编辑同一篇文章. class ...

  4. CodeForces 599A Patrick and Shopping

    水题.每种情况取最小值即可. #include<cstdio> #include<cstring> #include<cmath> #include<algo ...

  5. maven 新建项目时修改默认jre路径

    新建maven项目时,JRE System Library默认为J2SE-1.5 如果想修改为1.7,修改maven的settings.xml ,在profiles中添加 <profile> ...

  6. Java的对象和类

    以下内容引用自http://wiki.jikexueyuan.com/project/java/object-classes.html: 一.概述 Java是一种面向对象的语言.作为一种具有面向对象特 ...

  7. 从Java代码到字节码

    http://www.importnew.com/13107.html http://blog.csdn.net/dc_726/article/details/7944154/ http://www. ...

  8. Delphi中匿名方法动态绑定事件

    应恢弘之约,写了一个对其发布的匿名函数动态绑定到事件的封装,代码如下: type TAnonEvent=class public class function Wrap<T1,T2>(On ...

  9. SqlServer 经常使用分页方法总结

    SqlServer 经常使用分页方法总结 以下演示样例总结了,SqlServer数据库 经常使用分页方法,仅供学习參考 A. 使用 RowNumber 和 Between And 组合分页: /*** ...

  10. mutex 的 可重入

    在所有的线程同步方法中,恐怕互斥锁(mutex)的出场率远远高于其它方法.互斥锁的理解和基本使用方法都很容易,这里不做更多介绍了. Mutex可以分为递归锁(recursive mutex)和非递归锁 ...