首页 技术 正文
技术 2022年11月17日
0 收藏 843 点赞 4,246 浏览 2571 个字

Underscore是一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象。它是这个问题的答案:“如果我在一个空白的HTML页面前坐下, 并希望立即开始工作, 我需要什么?“…它弥补了部分jQuery没有实现的功能,同时又是Backbone.js必不可少的部分。

Underscore提供了100多个函数,包括常用的: map, filter, invoke — 当然还有更多专业的辅助函数,如:函数绑定, JavaScript模板功能,创建快速索引, 强类型相等测试, 等等.

template_.template(templateString, [settings])
将 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>

另外自己做了一个常用的demo:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>UnderscoreDemo</title>
<link href="style.css" rel="external nofollow" rel="stylesheet" type="text/css" />
<script src="jquery.js"></script>
<script src="../underscore.min.js"></script>
</head><body>
</body>
</html> <script id="historyTpl" type="text/template">
<%_.each(response, function(item) {%>
<div class="historyItem">
<div class="historyDate"><%=item.date%></div> <%_.each(item.list, function(user) {%>
<div class="userItem">
<img src="<%=user.icon%>"/><!---->
<p><%=user.nick%></p>
<p><%=user.prize%>天VIP会员</p>
</div>
<%});%> </div>
<%});%>
</script>
<script>
var response=[{"date":"Today","list":[{"uid":333222,"nick":"kitty","icon":"333.png","prize":30}]},{"date":"Yesterday","list":[{"uid":100077,"nick":"hello","icon":"333.png","prize":30}]},{"date":"2015-05-12","list":[{"uid":100077,"nick":"zealer9999","icon":"333.png","prize":30},{"uid":100034,"nick":"100034","icon":"333.png","prize":30}]}];
$("body").html( _.template($("#historyTpl").html(), response));
</script>
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,105
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,582
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,429
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,836
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,919