HTML模板引擎

支持特性

  1. 根据页面内嵌节点作为模板
  2. 根据嵌入式代码文件作为模板
  3. 从文件加载模板
  4. include标签的支持(页面嵌套)

下载

模板下载地址:https://github.com/vervet/dee.template

安装

  npm install dee-template

用法1. 根据页面内嵌节点作为模板

模板代码 (将模板放在当前代码页面)

<TEXTAREA id='tpl_1' style='display:none'>
   日期:<span>${date}</span>
   姓名:<span>${name}</span>
   照片:<img src='${body.photo}'>
   体重:<span>${body.weight}</span>
   身高:<span>${body.length}</span>

</TEXTAREA>

<div id='babyInformation'>
</div>

用法

  require("dee-template");
  var data ={
      date:'2017-06-02',
      name:'Allen,Ding',
      body:{
         'weight':3.45,
         'length':50,
      }
  }
  var node = Template.makeNode('#tpl_1', data);
  $('#babyInformation').append(node);

  //或者
  Template.makeNodeTo('#tpl_1',data,'#babyInformation');

用法2. 根据嵌入式代码文件作为模板

主页面代码:

<object id='obj_1' data='include.inc.html'
type='text/plain' style='disply:none'></object>

模板文件 include.inc.html代码:

<TEXTAREA id='tpl_1'>
   日期:<span>${date}</span>
   姓名:<span>${name}</span>
   照片:<img src='${body.photo}'>
   体重:<span>${body.weight}</span>
   身高:<span>${body.length}</span>
    <% 
        for(var i =0; i < 5; i++)
        {
    %>
        ${i} is <%=i %> 
     <%
        }
    %>
</TEXTAREA>
<TEXTAREA id='tpl_2'>
.....
</TEXTAREA>

用法:

 require("dee-template");
  var data ={
      date:'2017-06-02',
      name:'Allen,Ding',
      body:{
         'weight':3.45,
         'length':50,
      }
  }
  var maker = Template.fromEmbededObject('#obj_1');
  var html = maker.template('#tpl_1', data);

用法3. 从文件加载模板(node)

(依赖 FS 组件,只适合于nodeJs环境)

主页面代码:

模板文件 include.inc.html代码:

<div id='tpl_1'>
   日期:<span>${date}</span>
   姓名:<span>${name}</span>
   照片:<img src='${body.photo}'>
   体重:<span>${body.weight}</span>
   身高:<span>${body.length}</span>
    <% 
        for(var i =0; i < 5; i++)
        {
    %>
        ${i} is <%=i %> 
     <%
        }
    %>
</div>
<div id='tpl_2'>
...
</div>

主界面js用法:

  require("dee-template");
  var data ={
      date:'2017-06-02',
      name:'Allen,Ding',
      body:{
         'weight':3.45,
         'length':50,
      }
  }
  var maker = Template.fromFile('include.inc.html');
  var html = maker.template('#tpl_1', data);

4. include 标签的支持(html文件引用)

本方法适用于HTML的模块化
,本功能特别适合于大型项目,进行模块划分
include 功能的深度嵌入

主界面代码,
举例1

<INCLUDE node='tpl_1' src='include.inc.html' script='hello.js'></INCLUDE>

举例2

<INCLUDE module='inc_1' src='include.inc.html'></INCLUDE>
<INCLUDE module='inc_1' node='tpl_1' ></INCLUDE>
<INCLUDE module='inc_1' node='tpl_2' data='{a:1,b:2}'></INCLUDE>

模板文件 include.inc.html代码:

<div id='tpl_1' >
   日期:<span>${date}</span>
   姓名:<span>${name}</span>
   照片:<img src='${body.photo}'>
   体重:<span>${body.weight}</span>
   身高:<span>${body.length}</span>
</div>
<div id='tpl_2'>
   ...
</div>

主界面JS代码

4.1 include标签的属性

属性说明
src所嵌入的html代码所在文件名
node所使用的子模板的id(在模板文件内的节点id)
moduleinclude模板的实例id
data向模板填充的值
script需要执行的代码 (书写规则另见)

如果一个模板文件 有多个子模板节点被使用,
可以参考include功能的举例2,先将模板文件实例化,再分别使用各子模板

4.2 支持循环嵌套

include 支持循环嵌套

4.3 支持运行js代码

script 指向模块需要运行的内嵌代码,规则举例

class MyModule  {
  constructor($) { 
       this.$=$;
       //  $选中的节点,为局部HTML模块的节点
       var name = $('#username').html(); 
       myOldCode($);
  }
  publicMethod (){
     //公开的函数
     //使用方法,见下文
  }
} //class
function myOldCode($){
    //all my old code
}
module.exports = MyModule;

4.3.1 调用公共函数

//调用公共函数
$('include')[0].runtime.publicMethod();
//访问节点的类实例的函数

4.3.2 绑定自定义事件

//绑定自定义事件
$('include')[0].runtime.on('myevent',function(param){
    //.....
})

4.3.3 触发自定义事件

//类内部触发事件
this.trigger('myevent',123);
//或  
this.myevent.trigger(123);
//或从外部触发
$('include')[0].runtime.trigger('myevent',123);
//或
$('include')[0].runtime.myevent.trigger(123)

data 属性应用:

没有node值的include标签不会被实例化,
可以为该节点设置 node, data, module,甚至src 后,
使用activeInclude方法,动态激活该标签

<include id='inc_1'> </include>
$('#inc_1').attr('src','xxx.inc.html');
$('#inc_1').attr('node','tpl_10');
$('#inc_1').attr('data','{a:100,b:200}');
Template.activeInclude('#inc_1');
//或者
Template.activeInclude(
     '#inc_1',
     {node:'', src:'', data:''}
);

4.4 事件制造器 Template.EventFactory

Template.EventFactory(obj, event)
//为对象声明事件
Template.EventFactory(mainObj, 'myevent');

//触发事件
mainObj.myevent.trigger(111);

使用者
“`js
mainObj.myevent(function(param){
//接收到参数

});

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个非侵入式、不会破坏原来静态页面结构、可被浏览器正确显示的、格式良好的前端HTML模板引擎。彻底实现前后端分离,让后端专注业务的处理。 传统MVC开发模式,V层使用服务器端渲染。美工设计好静态HTML文件,交给后端工程师,需要转换成Jsp、Freemarker、Velocity等动态模板文件。这种模式有几个缺点 1、动态模板文件不能被浏览器解释、必须要运行在服务器中才能显示出效果 2、动态效果和静态效果分别存在不同文件,美工和后端工程师需要分别维护各自页面文件,其中一方需要修改页面,都需要通知另一方进行修改 3、页面数据不能分块加载、获取跨域数据比较麻烦 domTemplate.js 模板引擎是通过在标签中添加自定义属性,实现动态模板功能,当没有引入domTemplate脚本, 则自定义标签属性不会被浏览器解析,不会破坏原有静态效果,当引入domTemplate脚本,模板引擎回去解析这些标签属性, 并加载数据进行动态渲染。 下图:对比服务器页面渲染和使用domTemplate前端引擎开发流程 服务器端模板解析 domTemplate前端解析 用法 导入jquery.js或者zepto.js和domTemplate.js $(function () {  $.domTemplate.init(options); //可以通过selector指定根节点,默认根节点是body,表示从body开始,渲染整个页面  }); 或者解析某一个html片段。 $('selector').domTemplate(options); //渲染数据是通过h-model 自动去获取数据,也可以通过data指定全局数据 if条件标签 <div> <p h-if="{user.id==50}" h-text="用户ID等于50">xxx</p> <p>其他内容</p> <div> switch条件标签 <p h-switch="{user.id}"> <input type="text" h-case="20" h-val="{user.email}"/> <input type="text" h-case="60" h-val="拉拉"/> <input type="text" h-case="*" h-val="丽丽"/>  </p> each遍历标签 <p>遍历List例子</p> <ul> <li h-each= "user,userStat : {users}" h-text="{userStat.index 1}-{user.email}"> 李小璐</li> </ul> 自定义标签 $.domTemplate.registerTag('tagName',function(ctx,name,exp){ }); //tagName 是自定义标签名称,用时要加上前缀,如定义'test'标签,用时h-test="" 标签:domTemplate 分享 window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "2", "bdMiniList": [], "bdPic": "", "bdStyle": "1", "bdSize": "24" }, "share": {} }; with (document)0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' ~(-new Date() / 36e5)];\r\n \r\n \r\n \r\n \r\n \u8f6f\u4ef6\u9996\u9875\r\n \u8f6f\u4ef6\u4e0b\u8f7d\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\nwindow.changyan.api.config({\r\nappid: 'cysXjLKDf', conf: 'prod_33c27aefa42004c9b2c12a759c851039' });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值