Jquery模板-----JsRender

重新排版与堂堂88

先看下简单示例:

//Templates
<script type="text/x-jsrender" id="personListTemplate">
    {{for persons}}
        <tr>
            <td>{{:FirstName}}</td>
            <td>
                <a href="/Person/Edit/{{:PersonID}}">Edit</a> |
                <a href="/Person/Details/{{:PersonID}}">Details</a> |
                <a href="/Person/Delete/{{:PersonID}}">Delete</a>
            </td>
        </tr>
    {{/for}}
</script>
//Render Data
var html  = $("#personListTemplate").render(data);  //data数据没测试
//Insert into Container
$("#XXX").append(html);

JsRender三要素和行为

  从上面贴的代码可以看出,JsRender需要三要素:模板(Template)、容器(Container:简单。。。)、数据(Data:数据可以使各种js对象:如数组,object等等)。主要行为为:渲染模板、将渲染结果插入容器(这个太简单了)。说下渲染模板先。。。

JsRender渲染模板

  1、无需编译直接渲染:

var html = $("#XXXXX").render(data); // XXX代表某个脚本标记,也就是上面的<script id="XXX" type="text/x-jsrender">.......</script>

  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种方式不行      

JsRender模板(Template)

 基本的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>

jsrender数据遍历

//Template
{{for #data}}
        <h3>{{:name}}</h3>
        <ul>
        {{for language}}
             <li> {{:#parent.parent.data.name}} is learning {{:title}}</li>
        {{/for}}
        </ul>
{{/for}}
//Data
 var studnets = [
        {
            "name": "Mingjun Tang",
            "language": [{ "title": "English"},{ "title": "Franch"}]
        },
        {
            "name": "Ming Tang",
            "language": [{ "title": "English"}]
        }
];

  遍历时#data充当了students,同时#parent.parent.data.XXX可以用于向上迭代。注意这里的data并不是student中的属性额,因为#parent向上迭代后返回的是一个jsrender对象只有,#parent.data后才会返回数组内容。#parent在jsrender叫路径访问,但是我觉得这里叫向上迭代还要好些。

jsrender条件

{{if  fullprice}}
    html markup
{{else halfprice}}
    html markup
{{else}}
    html markup
{{/if}}
表达式 举例 注释
|| {{ :a || b }}
&& {{ :a && b }}
! {{ :!a }}
<= 和>=和 <和 > {{ :a <= b }} 比较
=== 和 !== {{ :a === b }} 等于和不等于

jsrender模板嵌套

<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));

这样就可以避免无限的嵌套下去,只需要设置{{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));
时间: 2024-09-30 04:35:11

Jquery模板-----JsRender的相关文章

下一代Jquery模板-----JsRender

在ASP.NET MVC利用PagedList分页(二)PagedList+Ajax+JsRender中提到了JsRender.JsRedner和JsViews(JsViews是再JsRender基础上的进一步封装)被称为下一代的Jquery模板,官方地址:https://github.com/BorisMoore/jsrender;https://github.com/BorisMoore/jsviews.Juqrey模板是一个javascript引擎(抄的.这个东东太高深了),他最直接的作用

jQuery模板插件jsrender

前几天学习jqm+phonegap,用到了一个jquery插件jsrender,(由于app不能用asp.net的服务端控件了,所以我也是醉了...),用于循环展示一下数据. 下面是我用到的几个简单用法: //code belows <!--step one--> <script src="js/lib/jquery-2.1.3.js"></script> <script src="js/lib/jsrender.js"&g

10 个强大的JavaScript / jQuery 模板引擎推荐

模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档.由于在开发过程中,网站或应用程序的界面与数据实现分离,大大提升了开发效率,良好的设计也使得代码重用变得更加容易.本文整理了10 款基于JavaScript和jQuery的模板引擎,希望能对你的开发工作带来一些帮助. 1. NANO 最简单的jQuery模板引擎,完美实现对JSON的解析. 源码 / 演示 2. The "template" binding 该工具通过渲染模板将相关联的DOM元素组织到一起.

jquery模板jquery.tmpl.js使用教程(附jquery.tmpl.js下载)

使用js tempate的意义:用js对json数据处理生成html,如果不复杂还可以,复杂了就不好处理了,而且让js代码看起来特不优雅,维护这种代码等于自杀啊,别谈扩展性了...介绍一个jquery模板 jquery.tmpl.js,使用案例如下: <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content=

MVC3----使用Jquery模板异步加载数据

*首先需要安装JQuery模板(右键引用->管理NuGet程序包->搜索jquery.templates->安装) --引用脚本 <script type="text/javascript" src="@Url.Content("~/Scripts/jQuery.tmpl.min.js")"></script> --控制器代码: public ActionResult QuickSearch(string

jQuery 模板插件jquery-tmpl

Step1:导入脚本: <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")"></script> <script src="@Url.Content("~/Scripts/jquery.tmpl.min.js")"></script> Step2:添加模板-占位符格式:$(json对象属性名): <scrip

javascript/jquery模板引擎——Handlebars初体验

最近自己在建一个站,采用完全的前后端分离的方式,现在正在做前端的部分.其中有项功能是需要ajax调用后端接口,返回json数据后要动态的插入数据.但是一开始我自己是用最"传统"的通过js拼接html字符串,然后再用jq插入到页面中.比如说下面的这个例子,我要显示一个个人信息卡: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <titl

jquery模板渲染

一.doT.js详细介绍 doT.js特点是快,小,无依赖其他插件.官网:http://olado.github.iodoT.js详细使用介绍 使用方法:{{= }} for interpolation{{ }} for evaluation{{~ }} for array iteration{{? }} for conditionals{{! }} for interpolation with encoding{{# }} for compile-time evaluation/include

手机开发类型jquery的框架Zepto(API)

Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. http://www.html-5.cn/Manual/Zepto/ Echo.js – 简单易用的 JavaScript 图片延迟加载插件 http://www.cnblogs.com/lhb25/p/echo-js-image-lazy-loading-plugin.html jquery.template.js与Zepto结合 1 va