laytpl--前端数据绑定

发现一枚前端数据绑定导弹:laytpl,官网:http://www.layui.com/laytpl/

为了不用angularJS等较为重量级的,和繁琐的配置,所以就用了laytpl,可以配合JQ使用

laytpl.js源码如下:

/** 

 @Name:laytpl-v1.1 精妙的js模板引擎
 @Author:贤心 - 2014-08-16
 @Site:http://sentsin.com/layui/laytpl
 @License:MIT license
 */

;!function(){"use strict";var f,b={open:"{{",close:"}}"},c={exp:function(a){return new RegExp(a,"g")},query:function(a,c,e){var f=["#([\\s\\S])+?","([^{#}])*?"][a||0];return d((c||"")+b.open+f+b.close+(e||""))},escape:function(a){return String(a||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/‘/g,"'").replace(/"/g,"&quot;")},error:function(a,b){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+a+"\n"+(b||"")),c+a}},d=c.exp,e=function(a){this.tpl=a};e.pt=e.prototype,e.pt.parse=function(a,e){var f=this,g=a,h=d("^"+b.open+"#",""),i=d(b.close+"$","");a=a.replace(/[\r\t\n]/g," ").replace(d(b.open+"#"),b.open+"# ").replace(d(b.close+"}"),"} "+b.close).replace(/\\/g,"\\\\").replace(/(?="|‘)/g,"\\").replace(c.query(),function(a){return a=a.replace(h,"").replace(i,""),‘";‘+a.replace(/\\/g,"")+‘; view+="‘}).replace(c.query(1),function(a){var c=‘"+(‘;return a.replace(/\s/g,"")===b.open+b.close?"":(a=a.replace(d(b.open+"|"+b.close),""),/^=/.test(a)&&(a=a.replace(/^=/,""),c=‘"+_escape_(‘),c+a.replace(/\\/g,"")+‘)+"‘)}),a=‘"use strict";var view = "‘+a+‘";return view;‘;try{return f.cache=a=new Function("d, _escape_",a),a(e,c.escape)}catch(j){return delete f.cache,c.error(j,g)}},e.pt.render=function(a,b){var e,d=this;return a?(e=d.cache?d.cache(a,c.escape):d.parse(d.tpl,a),b?(b(e),void 0):e):c.error("no data")},f=function(a){return"string"!=typeof a?c.error("Template not found"):new e(a)},f.config=function(a){a=a||{};for(var c in a)b[c]=a[c]},f.v="1.1","function"==typeof define?define(function(){return f}):"undefined"!=typeof exports?module.exports=f:window.laytpl=f}();

或者下载地址:laytpl.js

1.引用该js

2.建立<script type="text/html"></script>的模板

3.用laytpl.js吧得到的数据加入到<script type="text/html"></script>模板

4.把模板渲染到你要的html的demo

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 5     <title></title>
 6     <meta charset="utf-8" />
 7   <script src="/laytpl/laytpl.js"></script>
 8   <script>
 9     //假设你得到了这么一段数据
10     var data = {
11       title: ‘前端圈‘,
12       intro: ‘一群码js的骚年,幻想改变世界,却被世界改变。‘,
13       list: [{ name: ‘贤心‘, city: ‘杭州‘ }, { name: ‘谢亮‘, city: ‘北京‘ }, { name: ‘浅浅‘, city: ‘杭州‘ }, { name: ‘Dem‘, city: ‘北京‘ }]
14     };
15
16     window.onload = function () {
17       //建立视图。用于呈现渲染结果。
18       var gettpl = document.getElementById(‘testTpl‘).innerHTML;
19       laytpl(gettpl).render(data, function (html) {
20         //得到的模板渲染到html
21         document.getElementById(‘testDiv‘).innerHTML = html;
22       });
23     }
24   </script>
25 </head>
26 <body>
27   <script id="testTpl" type="text/html">
28     <h1>{{ d.title }}</h1>
29     <p>{{d.intro}}</p>
30     <ul>
31       {{# for(var i = 0; i < d.list.length; i++){ }}
32       <li>
33         <span>姓名:{{ d.list[i].name }}</span>
34         <span>城市:{{ d.list[i].city }}</span>
35       </li>
36       {{# } }}
37     </ul>
38   </script>
39   <div id="testDiv"></div>
40 </body>
41 </html>

显示结果:

用laytpl获取模板的另一种写法:

var tpl = laytpl(gettpl);
tpl.render(data, function(result){
console.log(result);
document.getElementById("testDiv2").innerHTML = result;
});

以下是官方文档:

//第一步:编写模版。你可以使用一个script标签存放模板,如:
<script id="demo" type="text/html">
<h1>{{ d.title }}</h1>
<ul>
{{# for(var i = 0, len = d.list.length; i < len; i++){ }}
  <li>
    <span>姓名:{{ d.list[i].name }}</span>
    <span>城市:{{ d.list[i].city }}</span>
  </li>
{{# } }}
</ul>
</script>

//第二步:建立视图。用于呈现渲染结果。
<div id="view"></div>

//第三步:渲染模版
var data = {
  title: ‘前端攻城师‘,
  list: [{name: ‘贤心‘, city: ‘杭州‘}, {name: ‘谢亮‘, city: ‘北京‘}, {name: ‘浅浅‘, city: ‘杭州‘}, {name: ‘Dem‘, city: ‘北京‘}]
};
var gettpl = document.getElementById(‘demo‘).innerHTML;
laytpl(gettpl).render(data, function(html){
  document.getElementById(‘view‘).innerHTML = html;
});
 一、模版语法
输出一个普通字段,不转义html:   {{ d.field }}
输出一个普通字段,并转义html:   {{= d.field }}
JavaScript脚本: {{# JavaScript statement }}

二、内置方法
1):laytpl(template);   //核心函数,返回一个对象

  var tpl = laytpl(template);
  tpl.render(data, callback);   //渲染方法,返回渲染结果,支持异步和同步两种模式
    a):异步
    tpl.render(data, function(result){
      console.log(result);
    });

    b):同步
    var result = tpl.render(data);
    console.log(result);

2):laytpl.config(options); //初始化配置
  options是一个对象
  {open: ‘开始标签‘, close: ‘闭合标签‘}

3):laytpl.v  //获取版本号

希望可以帮助到大家。

时间: 2024-10-12 20:00:53

laytpl--前端数据绑定的相关文章

ASP.NET 前端数据绑定---&lt;%#%&gt;及Eval()的使用

ASP.NET 前端html代码中会经常出现的<%%>的代码,里面的文本其实就是不能直接输出到客户端浏览器的文本,是需要服务器解释的. 在ASP中,<%%>里面的文本是vbscript或者javascript代码,在ASP.NET中,<%%>里面的文本就是.net平台下支持的语言. 具体有三种:<%%>,<%#%>,<%=%>,后两种主要是用于asp.net前端数据绑定的. 一 .<%=%> 在.aspx页面,<%=

麦子学院-Web前端开发工程师系列培训教程

HTML+CSS基础入门1.课程介绍2.html的语法3.html的基本结构4.html的文档设置标记上(格式标记)5.html的文档设置标记下(文本标记)6.html图像标记img7.html超链接的使用8.html表格相关的标记9.html表格实战<简单的网页布局>10.html框架详解与框架布局实战11.HTML表单设计(上)12.HTML表单设计(下)13.使用CSS样式的方式14.定义CSS样式(CSS选择器)15.CSS常用属性(颜色属性)16.css常用属性(字体相关属性)17.

一个利用HTML5 localStorage功能的todo应用(angularJs+Bootstrap)

今天在网上看到一个简单的todo应用,使用angularJs做前端数据绑定,利用localStorage来存储数据,觉得挺有意思的. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html ng-app="todoApp"> <head> <me

Node.js 切近实战(二) 之图书管理系统

上一篇Node.Js切近实战讲述了如何在VS上搭建Node.Js开发环境,相信看过那篇博客的同学,你已经对Node.Js有了好感,多了解些技术还是很有必要的.所谓实战见真功,还是要实战才行.我看博客园上一些专家荣誉的人写的博客,全是理论,没有实战,没有实战就没有发言权.熟能生巧,实战出理论. 我们看一下项目结构 典型的NodeJs三层架构,controller,model,view,这里每个部分什么职能,我就不多说了. 首先我们看一下登录界面,先上图,我看博客的时候,会首先看博客中有没有图,比如

16、前端知识点--Object.defineProperty 的用法+双向数据绑定原理解析

一.Object.defineProperty 的用法 Object.defineProperty 可以用于给对象添加更新属性. <script> // Object.defineProperty可以用于给对象添加或更新属性. // 它里面有下面三个参数: 给设置属性的对象.设置属性的属性名.以及设置的配置项 // 先声明的一个对象 var obj = {} Object.defineProperty(obj,"name",{ // 这个配置项里面有两个函数,分别是gett

前端资源教程合集

综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v2.2 En类资源汇总 免费的编程中文书籍索引 前端书籍 前端免费书籍大全 前端知识体系 免费的编程中文书籍索引 智能社 - 精通JavaScript开发 重新介绍 JavaScript(JS 教程) 麻省理工学院公开课:计算机科学及编程导论 JavaScript中的this陷阱的最全收集--没有之一 JS函数式编程指南 JavaScript Promise迷你书

看着看着就哭了的前端地址大全

原文地址:http://www.w3cfuns.com/notes/16438/db8e9e0bf80676f32b2cafb9b4932313.html 综合类 | 地址--- | --- 前端知识体系|http://www.cnblogs.com/sb19871023/p/3894452.html前端知识结构|https://github.com/JacksonTian/fksWeb前端开发大系概览|https://github.com/unruledboy/WebFrontEndStack

前端涉及的所有知识体系

资源教程: 综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v2.2 免费的编程中文书籍索引 前端书籍 前端免费书籍大全 前端知识体系 免费的编程中文书籍索引 智能社 - 精通JavaScript开发 重新介绍 JavaScript(JS 教程) 麻省理工学院公开课:计算机科学及编程导论 JavaScript中的this陷阱的最全收集--没有之一 JS函数式编程指南 JavaScript Promise迷你书(中

前端知识体系2

Raw Blame History 1226 lines (983 sloc) 67.4 KB QQ联盟群交流(492107297)群规 GITHUB在线地址 http://t.cn/RL2NtqX 看云在线地址 http://t.cn/RUdaGHn 这是我们联盟群的组织结构,加入等级参考JS高级前端开发群加群说明. 这本来是我QQ群内部的一份公共约定的日常交流规则,后来得到大伙的一致认可,并用实际行动来捍卫它,使我倍受感动. 后来想:传播使爱更有力量,阅读使内心更为坚强,沉淀使生活更为醇香,