Visro 应用的前端模板工具介绍 -JsRender
1.什么是JsRender:
JsRender是一款JavaScript模版引擎,是具有简单直观,功能强大,可扩展的,早期版本是基于JQUERY 写的,后来作者重构了,就不再依赖JQUERY了.
它的官方网站在 http://www.jsviews.com/#jsrender。 英文好的可以参考官方文档和示列。 在Visor中,可以定义JsRender模板,然后通过设计的ER 对象和Entity 对象数据生成相应的SQL 和 Entity 类文件。 Visor 具体应用不在这里累赘。大家自己可以去体验
Http://www.visor.com.cn. 下面书归正传
2.为什么需要模板
下面是一个jQuery例子:
|
var html = ''; $.each(data.persons, function (i, item) { html += "<tr><td>" + item.FirstName + "</td><td><a href='/Person/Edit/" + item.PersonID + "'>Edit</a> | <a href='/Person/Details/" + item.PersonID + "'>Details</a> | <a href='/Person/Delete/" + item.PersonID + "'>Delete</a></td></tr>"; }); $('#XXX').append(html); |
这样写很明显的坏处就是:这样的代码可见性太低,很难维护。
再来看看JsRender的例子
//Templates <script id="peopleTemplate" type="text/x-jsrender"> //Container <div id="peopleList"></div> //Data <script> //Render Data //Insert into Container var peopleTemplate=$.templates("#peopleTemplate");
|
这样的代码看起来结构清晰多了。
3.JsRender三要素
从上面JsRender的例子可以看出来,JsRender需要三要素,分别为模板(Templete),容器(Container),数据(Data)。主要行为是将数据渲染进模板(Render Data),再将渲染结果插入容器(Insert into Container)。
4.JsRender渲染模板
在JsRender中,是通过调用方法render()来渲染模板的。有以下3种方式:
- 如果已经存在一个template的对象,则可以使用template.render(...)
|
如上例 |
- 如果已经有一个通过名字注册的template,名字为("personTmpl"),则可以使用$.render.personTmpl(...)调用。
$.templates("personTmpl", "#personTemplate");
var html = $.render.personTmpl(person);
|
- 如果该template是在一个script脚本块中定义的,并且该脚本块使用selector“#myTmpl",则同样可以使用$("# personTemplate").render(...)调用
<script id="personTemplate" type="text/x-jsrender"> |
第1和第2种方式是渲染前编译:
/*A、获取模板对象的方式编译*/ var xxxTemplate = $.templates("#xxxTemplate");//既可以是字符串也可以是脚本标记,B是字符串
var html = xxxTemplate.render(data); /*B、指定模板名称的方式编译*/ $.templates('xxx','<b>{{:name}}</b>');
$.templates({
'yyy','<b>{{:name}}</b>',
'zzz','<b>{{:name}}</b>'
}); var html = $.render.xxx(data);//注意,第B种方式可以同时渲染多个模板,但是第A种方式不行 |
第3种方式是无需编译直接渲染:
var html = $("#XXXXX").render(data); // XXX代表某个脚本标记,也就是上面的<script id="XXX" type="text/x-jsrender">.......</script>
|
总结一下可以看出:
1、无编译直接渲染的方式无法用于字符串的渲染;渲染前编译的方式字符串和脚本标记皆可。
2、制定模板名称的方式编译可以同时编译多个模板,但是获取模板对象的方式编译只能编译一个模板
5. JsRender模板(Template)
基本的JsRender标签:JsRender 模板主要由html标记和jsrender标签(像上面的{{:XXX}})组成。所有的Jsrender标签都被两个大括号包裹,中间既可以是参数也可以是表达式(如:{{:#index}}和{{:#index+1}}),下面看一下一些基本的Jsrender标签。
|
描述 |
例子 |
输出 |
||
|
参数firstName的值(未被Html编码) |
{{:firstName}} |
Madelyn |
||
|
参数movie的属性--releaseYear的值(未被html编码) |
{{:movie.releaseYear}} |
1987 |
||
|
比较(表达式,未被html编码) |
|
true |
||
|
经html编码的值(更加安全,但是要耗点内存) |
{{>movie.name}} |
Star Wars: Episode VI: <span style='color:purple;font-style: italic;'>Return of the Jedi</span> |
||
|
经html编码的值 |
{{html:movie.name}} |
Star Wars: Episode VI: <span style='color:purple;font-style: italic;'>Return of the Jedi</span> |
5.1 JsRender数据遍历:
{{for xxx}}
<li>{{:xxx.property }}</li>
{{/for}}
如果想获取xxx本身,可以这样写:
{{for xxx yyy}}
<li>{{:#data}}</li>
{{/for}}
上面的例子说明了两点,1、for不仅仅可以遍历一组数据,他甚至可以同时遍历两组和多组数据(强大了 吧...)。2、上面的#data就表示xxx和yyy本生。试想一下,如何xxx和yyy都表示一个基本元素(字符串、整数等等、任意交叉)的数组,那 么这个是不是能很好的完成遍历呢?说道#data,不得不提一下#index,#data和#index都是内置的JsRender关键字(#data为数据本身,#index默认值为0)。下面再看一个例 子:
5.2JsRender条件
{{if fullprice}}
html markup
{{else halfprice}}
html markup
{{else}}
html markup
{{/if}}
1、if....else....else表示了if elseif else,这里的else表示了elseif。
2、{{if fullprice}}中的fullprice条件表达式表示的是fullprice不为空。其实还可以有更懂的条件表达式可以应用到这里来,如下:
|
表达式 |
举例 |
介绍 |
|
|| |
{{ :a || b }} |
或 |
|
&& |
{{ :a && b }} |
且 |
|
! |
{{ :!a }} |
非 |
|
<= 和>=和 <和 > |
{{ :a <= b }} |
比较 |
|
=== 和 !== |
{{ :a === b }} |
等于和不等于 |
3、在条件表达式中还可以用一些属性进行比较,如{{if xxx.length > 50}}等等
5.3模板嵌套
<script type="text/x-jsrender" id="studentTemplate"> {{for #data}}
<h3>{{:name}}</h3>
<ul> {{for language tmpl="#studentLanguageTemplate" /}}
</ul> {{/for}}
</script> <script type="text/x-jsrender" id="studentLanguageTemplate"> <li> {{:#parent.parent.data.name}} is learning {{:title}}</li>
</script> |
以上是为JsRender的模板嵌套,只需要设置{{for}}的tmpl属性即可。这时,tmpl是一个脚本标记。
如果studentLanguageTemplate已经被$.templates()编译,那么也可以这么写:
<script type="text/x-jsrender" id="studentTemplate"> {{for #data}}
<h3>{{:name}}</h3>
<ul> {{for language tmpl="studentLanguageTemplate" /}}
</ul> {{/for}}
</script> <script type="text/x-jsrender" id="studentLanguageTemplate"> <li> {{:#parent.parent.data.name}} is learning {{:title}}</li>
</script> //render $.templates("studentLanguageTemplate", "#studentLanguageTemplate");
$("#studentList").html($("#studentTemplate").render(studnets));
|
上面的templ不再“#XXX”指向一个脚本标记,而是"XXX"指向一个已经标记的脚本标记。
Visro 应用的前端模板工具介绍 -JsRender的更多相关文章
- Sublime Text前端开发工具介绍
Sublime Text前端开发工具介绍.. Sublime Text这款前端开发工具中的非常优秀的特性进行介绍 ------------ sublime text 3 3114 注册码 —– BEG ...
- [原创]H5前端性能测试工具介绍
[原创H5前端性能测试工具介绍 一 网络抓包工具 网络抓包工具选择原则,可以捕获网络请求,抓取具体请求信息流,同时可以针对网络请包进行修改或拦截: 1.Fiddler(推荐) 2.Charles(推荐 ...
- sitespeedio前端性能测试工具介绍
很久没有写博客了,今天给大家介绍一款比较好用的前端性能测试工具. sitespeedio简介: sitespeed.io是Jonathan Lee发布的一款可监视和衡量网站前端性能的开源工具. 1.开 ...
- 实例演示 kino.razor (前端 Javascript 模板工具,Razor 风格)的使用
前言 对于习惯了 ASP.NET MVC Razor 模板引擎的人来说,比如我,一直在寻找前端 Javascript 端的 Razor 模板工具.这之前,我也了解到很多Javascript 端的模板工 ...
- 前端构建工具gulpjs的使用介绍及技巧
gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速 ...
- 前端构建工具gulp介绍
2016年3月3日 10:46:08 晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...
- [转载]前端构建工具gulpjs的使用介绍及技巧
转载地址:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非 ...
- web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}
前端之前端初识 前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...
- 前端构建工具gulpjs的使用介绍及技巧(一)
原文链接:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非 ...
随机推荐
- IE11 HTML Help ActiveX
<!--by: @qab--> <OBJECT id=HHCTRL type="application/x-oleobject" classid="cl ...
- T-SQL编程 —— 用户自定义函数(内嵌表值函数)
内嵌表值函数 接上 <T-SQL编程 -- 用户自定义函数(标量函数)> http://www.cnblogs.com/viusuangio/p/6212072.html 内嵌表值函数可以 ...
- C# 文件及文件夹深度复制
完善了下 文件中的文件及文件夹中的复制!如果有更优解决方案请不吝指教 protected void FileDepthCopy(string source, string target){ if (D ...
- lightBox灯箱效果
最近想做一个类似QQ空间相册,点击照片会出现一个遮罩层,然后显示照片,可以左右切换照片,上网查了,原来叫灯箱效果,于是自己也写了一个简单的灯箱效果,并进行了简单封装,封装得不是很完善,后面还需要改进, ...
- C#常用错误
解决方法: 在配置文件连接数据库设置后加 MultipleActiveResultSets=true; <add key="ConnectionString" value=& ...
- 易货beta版本测试报告
测试 对于服务器端我们是进行了单元测试 对于客户端我们使用的是在线的云测工具对app进行了包括安装,启动,具体功能以及ui方面的测试. 另外,对于客户端,我们还进行了对细节功能的人工测试 功能需求编号 ...
- linux系统下静态IP的设置
首先说明:下面用的系统为:kali 4.6.0版本的哦:不同的系统是不一样的:反正吧,在ubuntu上的好多方法在kali上就不管用,并且吧,不同的ubuntu的版本也不一样的: 第一步:设置网络的I ...
- WPF界面布局——Canvas
Canvas用于定义一个区域,称为画布,用于完全控制每个元素的精确位置.它是布局控件中最为简单的一种,直接将元素放在指定位置,使用Canvas时,必须指定一个子元素的位置(相对于Canvas),否则所 ...
- jquery获得option的值和对option进行操作
Query获取Select元素,并选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添加 ...
- ADO.NET 访问数据库
对数据库的访问时各种数据库应用程序开发的核心技术,.NET框架中提出的ADO.NET技术为应用程序的开发提供了一致的接口,增强了程序的可移植性和可扩展性. a:使用链接对象Connection连接数据 ...