underscore模板功能的使用和学习

最近好忙啊,各种项目急着上线。css调的头晕脑胀,再也没时间琢磨我那可爱的js小妖精了。

不过在百忙中还是要表达一下对underscore.js的感谢,小巧轻便的实现了我的需求。具体说一下情况,开会的时候约定接口,

我当时夸下海口跟后台大哥拍着胸脯说,你给我一段json,我还你一个前端(肠子已经悔青)

于是后台那位耿直的兄弟真的就去这么做了,把所有的接口都是封装成json格式的数据给到我。

开始干活了,一开始我的处理方法是用ajax请求到数据后,拿出来放到自己的函数中使用js操作dom完成各种需求。越写就会

发现越头疼,慢慢的数据量多了,接口也多了。就在头疼之时遇到了underscore,里面提供了一个很好的模板功能_.template

使用类似于jsp的写法<%=item.film%>来替换json中对应的数据,不仅使得数据与页面分离开来,还很好的提高了代码的可维

护性。下面来仔细说说这个underscore:

将 JavaScript 模板编译为可以用于页面呈现的函数, 对于通过JSON数据源生成复杂的HTML并呈现出来的操作非常有用。 模板函数可以使用 <%= … %>插入变量, 也可以用<% … %>执行任意的 JavaScript 代码。 如果您希望插入一个值, 并让其进行HTML转义,请使用<%- … %>。 当你要给模板函数赋值的时候,可以传递一个含有与模板对应属性的data对象 。 如果您要写一个一次性的, 您可以传对象 data 作为第二个参数给模板 template 来直接呈现, 这样页面会立即呈现而不是返回一个模板函数. 参数 settings 是一个哈希表包含任何可以覆盖的设置 _.templateSettings.

var compiled = _.template("hello: <%= name %>");
compiled({name: ‘moe‘});
=> "hello: moe"

var template = _.template("<b><%- value %></b>");
template({value: ‘<script>‘});
=> "<b>&lt;script&gt;</b>"

您也可以在JavaScript代码中使用 print. 有时候这会比使用 <%= ... %> 更方便.

var compiled = _.template("<% print(‘Hello ‘ + epithet); %>");
compiled({epithet: "stooge"});
=> "Hello stooge"

如果ERB式的分隔符您不喜欢, 您可以改变Underscore的模板设置, 使用别的符号来嵌入代码.定义一个 interpolate 正则表达式来逐字匹配嵌入代码的语句, 如果想插入转义后的HTML代码则需要定义一个 escape 正则表达式来匹配,还有一个 evaluate 正则表达式来匹配您想要直接一次性执行程序而不需要任何返回值的语句.您可以定义或省略这三个的任意一个.例如, 要执行Mustache.js类型的模板:

_.templateSettings = {
  interpolate: /\{\{(.+?)\}\}/g
};

var template = _.template("Hello {{ name }}!");
template({name: "Mustache"});
=> "Hello Mustache!"

默认的, template 通过 with 语句来取得 data 所有的值. 当然, 您也可以在 variable 设置里指定一个变量名. 这样能显著提升模板的渲染速度.

_.template("Using ‘with‘: <%= data.answer %>", {variable: ‘data‘})({answer: ‘no‘});
=> "Using ‘with‘: no"

预编译模板对调试不可重现的错误很有帮助. 这是因为预编译的模板可以提供错误的代码行号和堆栈跟踪, 有些模板在客户端(浏览器)上是不能通过编译的 在编译好的模板函数上, 有 source 属性可以提供简单的预编译功能.

<script>
  JST.project = <%= _.template(jstText).source %>;
</script>

官方api的所有说明,可以说很清晰很明朗,于是乎下面的代码诞生了:
 <%_.each(datas, function(item) {%>
            <div class="outer">
                <div class="title">
                    <span ><%=item.film%></span>
                </div>
                <ul class="ul">
                    <%_.each(datas, function(item) {%>
                        <li>
                            <a href="<%=item.url%>">【<%=item.title%>】</a>
                        </li>
                    <%});%>
                </ul>
            </div>
        <%});%>

数据json是:

var datas = [{
    name: "平安",
    price: "7183.81",
    url: "www.pingan.com"
}, {
    name: "平安",
    price: "7183.81",
    url: "www.pingan.com"
}, {
    name: "平安",
    price: "7183.81",
    url: "www.pingan.com"
}, {
    name: "平安",
    price: "7183.81",
    url: "www.pingan.com"
}];

调用语句:

$(".containerF").html(_.template($("#t2").html(), datas));

想放在哪个div下面就放在哪个div下面,只需要改变类名.containerF

时间: 2024-08-29 03:23:52

underscore模板功能的使用和学习的相关文章

Underscore.js 的模板功能介绍与应用

Underscore是一个非常实用的JavaScript库,提供许多编程时需要的功能的支持,他在不扩展任何JavaScript的原生对象的情况下提供很多实用的功能,需要了解的朋友可以详细参考下 Underscore是一个非常实用的JavaScript库,提供许多编程时需要的功能的支持,他在不扩展任何JavaScript的原生对象的情况下提供很多实用的功能. 无论你写一段小的js代码,还是写一个大型的HTML5应用,underscore都能帮上忙.目前,underscore已经被广泛使用,例如,b

(二)underscore.js框架Utility类API学习以及模型template的详细介绍

本文介绍的是underscore.js提供的Utility Functions. noConflict_.noConflict() Give control of the "_" variable back to its previous owner. Returns a reference to theUnderscore object. 这个函数主要是为了解决underscore.js与其他框架或js名字冲突的问题.我们知道:underscore.js使用全局对象_,如果在unde

HTML格式自定义OpenCart邮件模板功能插件

HTML格式自定义OpenCart邮件模板功能插件 HTML格式自定义OpenCart邮件模板功能插件 前台演示网址后台登录信息: 用户名: demo 密码: demo后台演示网址型 号: COC-A0003 ¥100.00 税前: ¥100.00购买所需积分: 80 购买数量: +- * 扩充功能安装:              --- 请选择 ---                          自己安装                                         

2017U-Mail邮件营销平台新邮件模板功能

据U-Mail调查表明,企业用户中普遍最关心群发邮件会不会被列入垃圾箱?的确,哪怕你最用功,一旦邮件进了垃圾箱,意味着全盘尽废.业界知名服务商U-Mail一直想用户之所想,急用户之所急,十几年如一日,捕捉市场动向,把握用户痛点需求,孜孜探讨解决之道,持续改进邮件群发平台,在2017年,他们推出的最新版本邮件营销平台,功能更丰富,效果更显著,且以其中一个小功能"邮件模板"的改进为例吧,它不但能节省营销人员时间提高了效率,还减少了邮件进垃圾箱的概率.不妨听小编细细说来: 一.新版U-Mai

PHP自写简单模板引擎,供新手学习

今天要写点小东西,突然想到要用模板引擎.就"随手"写了一个,发上来供新手学习.搞了这么久PHP,想想也真是感慨,当年研究了几天的东西现在一两个小时就弄完了,当年一起完耍的女神现在已经不知所踪了...咳咳,下面是代码: <?php /**************** * @author: 一曲忧伤 * @email: [email protected] * @discription: 简单模板引擎 */ class view { var $tpl_dir = 'template';

Java:封装POI实现word的docx文件的简单模板功能

一:场景 通过Word模板来实现动态的word生成 二: 基本要求 1:替换文本中的内容 2:替换表格中的内容(不用动态生成表格) 3:替换后的内容应该与替换前的内容格式相同 4:模板修改方便 5:效果如下: 模板: 结果: 三:poi分析 使用方法:直接读取word文件,替换里面各个部分的内容 优点:直接使用word文件作为模板 缺点:本身的替换逻辑无法保留格式 四:为什么选择封装POI 1:因为时间和学习成本(懒)的问题,没有研究docx的xml规则,因此决定直接对现有的工具进行封装,来实现

node(4)express 框架 EJS模板,cookie, session的学习

一.EJS 概述:前端咱们使用过的一个模板套路,是underscore的套路.接下来EJS它属于后台工程师人的模板. https://www.npmjs.com/package/ejs 官网地址 特点: Control flow with <% %>             流程控制语句用的是<% %>   :例如if   for循环等等 Escaped output with <%= %> (escape function configurable)     如果有赋

C++标准模板库(STL)学习

1.什么是标准模板库STL(Standard Template Lib) 在之前已经学习过函数模板和类模板的声明和使用方法,之前的模板都是程序员自己根据自己的需求来设计的,从自己去声明这个模板的到最后去使用 模板都是自己完成的:而这些标准模板库并不是我们自己写的,而是一些大神们写的,因为他们在编程的过程中,经常会使用一些常用的模板,而每次 都需要去重复创建模板,久而久之,这些大神们就会将这些常用又很使用的模板做成一个模板库的形式,也就形成了现在使用的标准模板库STL.跟我 们的标准函数库一样,也

C++标准模板库与数据结构的学习

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中极具革命性的一部分.该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法.为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性. 体验STL中的list STL中提供的list类,是一个双向循环链表类.从每一个元素(节点),都可以访问前面一个元素