当前位置: 首页 > news >正文

javascript模板库jsrender加载并缓存外部模板文件

前一篇说了jsrender嵌套循环的使用,在SPA的应用中,广泛使用的一个点就是view模板,使用了SPA之后,每个业务页面不再是独立的html,仅仅是一个segment,所以通常这些segment会被独立的存储,而不是跟demo一样嵌在宿主页面中。因为jsrender的模板本质上就是一个string,所以一般三方库angularjs/backbone.js都提供了加载外部模板的机制。其实原理都一样,差不多都是通过ajax从远程加载,然后缓存在B/S端,在jsrender中,通过类似机制,也可以达到一样的目标。如下所示:

render_seg.html

{{for #data}}
    <h3>{{:name}}</h3>
    <ul>
    {{for language}}
        <li>
        {{:#parent.parent.data.name}} is learning {{:title}}<br/>
        {{for scores}}
            <a href="#">{{:score}}</a>
        {{/for}}
        </li>
    {{/for}}
    </ul>
{{/for}}

主页面jsrender_nest_external.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="jquery-1.11.1.min.js"></script>
    <script type="text/javascript" src="jsrender.js"></script>
    <title>jsrender nest external demo</title>
</head>
<body>
<div id="studentList"></div>
<script type="text/javascript">
    var temps = {};
    var url = "studentTemp";
    var students = [{name:"张三",language:[{title:"中",scores:[{score:12},{score:13},{score:14}]},{title:"英",scores:[{score:12},{score:13},{score:14}]},{title:"数",scores:[{score:12},{score:13},{score:14}]}]},
                    {name:"李四",language:[{title:"中",scores:[{score:12},{score:13},{score:14}]},{title:"中",scores:[{score:12},{score:13},{score:14}]},{title:"中",scores:[{score:12},{score:13},{score:14}]}]},
                    {name:"王五",language:[{title:"中",scores:[{score:12},{score:13},{score:14}]},{title:"中",scores:[{score:12},{score:13},{score:14}]},{title:"中",scores:[{score:12},{score:13},{score:14}]}]}];
    if(temps[url]) {
        var tmpl = $.templates(temps[url]);
        $("#studentList").html(tmpl.render(students));
    } else {
        $.ajax({
            url: "render_seg.html", //这里是静态页的地址
            type: "GET", //静态页用get方法,否则服务器会抛出405错误
            success: function (data) {
                temps[url] = data;
                var tmpl = $.templates(temps[url]);
                $("#studentList").html(tmpl.render(students));
            }
        });
    }
</script>
</body>
</html>

其效果和内嵌模板完全相同,不过更加的干净。

 

转载于:https://www.cnblogs.com/zhjh256/p/6073291.html

相关文章:

  • 《java与模式》学习系列——装饰模式
  • 初始化Git的配置
  • 《java与模式》学习系列——享元模式
  • Java WebService 简单实例
  • java.lang.instrument使用
  • 《java与模式》学习系列——门面模式
  • 《java与模式》学习系列——桥梁模式
  • 《java与模式》学习系列——观察者模式
  • angularjs服务-service
  • 《java与模式》学习系列——迭代子模式
  • Werkzeug工具包学习-官方例子Shortly分析
  • 《java与模式》学习系列——责任链模式
  • iOS中的交换空间(swap space)
  • 《java与模式》学习系列——命令模式
  • Windows10中无法打开这个应用的解决方案
  • “大数据应用场景”之隔壁老王(连载四)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 2017年终总结、随想
  • Effective Java 笔记(一)
  • es的写入过程
  • IOS评论框不贴底(ios12新bug)
  • JavaWeb(学习笔记二)
  • Java小白进阶笔记(3)-初级面向对象
  • mongo索引构建
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • oldjun 检测网站的经验
  • Promise初体验
  • React系列之 Redux 架构模式
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 理清楚Vue的结构
  • 每天10道Java面试题,跟我走,offer有!
  • 入门级的git使用指北
  • 手写一个CommonJS打包工具(一)
  • 微信公众号开发小记——5.python微信红包
  • 协程
  • 找一份好的前端工作,起点很重要
  • 7行Python代码的人脸识别
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (2)(2.10) LTM telemetry
  • (第27天)Oracle 数据泵转换分区表
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (四)JPA - JQPL 实现增删改查
  • (五)关系数据库标准语言SQL
  • (转)shell调试方法
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ..回顾17,展望18
  • .NET Core 中的路径问题
  • .Net Core和.Net Standard直观理解
  • .NET Micro Framework初体验
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .pop ----remove 删除