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">
<div>
{{for address}}
{{if show}}
{{:a}}</br>
{{else}}
{{:b}}</br>
{{/if}}
{{/for}}
</div>
</script>
//Container
<div id="peopleList"></div>
//Data
<script>
var people=[
{ "name":"jose",
"address":[
{"show":true,"a":"","b":"1b"},
{"show",false,"a":"","b":"2b"},
{"show",false,"a":"","b":"3b"}
]
}
]
 
//Render Data
//Insert into Container
var peopleTemplate=$.templates("#peopleTemplate");
var html=peopleTemplate.render(people);
$("#peopleList").html(html);
 

这样的代码看起来结构清晰多了。

3.JsRender三要素

从上面JsRender的例子可以看出来,JsRender需要三要素,分别为模板(Templete),容器(Container),数据(Data)。主要行为是将数据渲染进模板(Render Data),再将渲染结果插入容器(Insert into Container)。

4.JsRender渲染模板

在JsRender中,是通过调用方法render()来渲染模板的。有以下3种方式:

  1. 如果已经存在一个template的对象,则可以使用template.render(...)

如上例

 
  1. 如果已经有一个通过名字注册的template,名字为("personTmpl"),则可以使用$.render.personTmpl(...)调用。
$.templates("personTmpl", "#personTemplate");

var html = $.render.personTmpl(person);
  1. 如果该template是在一个script脚本块中定义的,并且该脚本块使用selector“#myTmpl",则同样可以使用$("# personTemplate").render(...)调用
<script id="personTemplate" type="text/x-jsrender">
...
</script> var html = $("#personTemplate").render(person);

第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编码)

 

{{:movie.releaseYear < 2000}}

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>
//render
$("#studentList").html($("#studentTemplate").render(studnets));

以上是为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的更多相关文章

  1. Sublime Text前端开发工具介绍

    Sublime Text前端开发工具介绍.. Sublime Text这款前端开发工具中的非常优秀的特性进行介绍 ------------ sublime text 3 3114 注册码 —– BEG ...

  2. [原创]H5前端性能测试工具介绍

    [原创H5前端性能测试工具介绍 一 网络抓包工具 网络抓包工具选择原则,可以捕获网络请求,抓取具体请求信息流,同时可以针对网络请包进行修改或拦截: 1.Fiddler(推荐) 2.Charles(推荐 ...

  3. sitespeedio前端性能测试工具介绍

    很久没有写博客了,今天给大家介绍一款比较好用的前端性能测试工具. sitespeedio简介: sitespeed.io是Jonathan Lee发布的一款可监视和衡量网站前端性能的开源工具. 1.开 ...

  4. 实例演示 kino.razor (前端 Javascript 模板工具,Razor 风格)的使用

    前言 对于习惯了 ASP.NET MVC Razor 模板引擎的人来说,比如我,一直在寻找前端 Javascript 端的 Razor 模板工具.这之前,我也了解到很多Javascript 端的模板工 ...

  5. 前端构建工具gulpjs的使用介绍及技巧

    gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简单,学习起来很容易,而且gulpjs使用的是nodejs中stream来读取和操作数据,其速 ...

  6. 前端构建工具gulp介绍

    2016年3月3日 10:46:08     晴 前端构建工具gulpjs的使用介绍及技巧 gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非常简 ...

  7. [转载]前端构建工具gulpjs的使用介绍及技巧

    转载地址:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非 ...

  8. web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}

    前端之前端初识   前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...

  9. 前端构建工具gulpjs的使用介绍及技巧(一)

    原文链接:http://www.cnblogs.com/2050/p/4198792.html gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数,API也非 ...

随机推荐

  1. WinForm开发框架【细化权限至操作按钮】

    有不少园友经常问我程序有没有更新,真的很抱歉,最近因为工作原因一直很忙,导致程序有很长时间都没有更新了,首先在这里感谢关心俺的朋友们. 这几天好好看了一下原来的程序,还有很多地方需要改进,比如操作数据 ...

  2. 【iOS实现一个颜色渐变的弧形进度条】

    在Github上看到一些进度条的功能,都是通过Core Graph来实现.无所谓正确与否,但是开发效率明显就差很多了,而且运行效率还是值得考究的.其实使用苹果提供的Core Animation能够非常 ...

  3. eclipse加载maven工程提示pom.xml无法解析org.apache.maven.plugins:maven-resources-plugin:2.4.3解决方案

    pom文件提示信息: Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.4.3 from http:/ ...

  4. ichart.js绘制虚线 ,平均分虚线

    var Data=new Array(); Data[0] = { labels : ["第一单元","第二单元","第三单元"," ...

  5. window 配置wnmp(转下整理 ,全)

    工具/原料   RunHiddenConsole.exe 下载地址:http://pan.baidu.com/share/link?shareid=100074&uk=822373947 方法 ...

  6. Linux Oracle 转换编码格式

    [oracle@gpdb ~]$ sqlplus /nolog SQL> conn /as sysdba; SQL>select userenv('language') from dual ...

  7. Ioc

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  8. iBatis框架基本使用

    iBatis框架是Java持久层开发框架,说白了就是前人写了一部分代码(针对数据库操作),我们要做的就是再次开发,拿来框架直接使用. 我们自己开发时,dao层的sql语句都是写死在程序中的,如果查询条 ...

  9. java ZipOutputStream压缩文件,ZipInputStream解压缩

    java中实现zip的压缩与解压缩.java自带的 能实现的功能比较有限. 本程序功能:实现简单的压缩和解压缩,压缩文件夹下的所有文件(文件过滤的话需要对File进一步细节处理). 对中文的支持需要使 ...

  10. L2TP协议

    L2TP协议 L2TP(Layer 2 Tunneling Protocol) 第二层隧道协议.该协议是工业标准的Internet隧道协议. L2TP实现的两种方式 LAC (L2TP Access ...