该方法接受一系列函数作为参数,由后向前依次运行,上一个函数的运行结果,作为后一个函数的运行参数。也就是说,将f(g(),h())的形式转化为f(g(h()))。
复制代码 代码如下:
var greet = function(name){ return "hi: " + name; }; var exclaim = function(statement){ return statement + "!"; }; var welcome = _.compose(exclaim, greet); welcome('moe'); // 'hi: moe!'
工具方法
template
该方法用于编译HTML模板。它接受三个参数。
复制代码 代码如下:
_.template(templateString, [data], [settings])
三个参数的含义如下:
templateString:模板字符串
data:输入模板的数据
settings:设置
templateString
模板字符串templateString就是普通的HTML语言,其中的变量使用<%= … %>的形式插入;data对象负责提供变量的值。
复制代码 代码如下:
var txt = "
<%= word %>
复制代码 代码如下:
"; _.template(txt, {word : "Hello World"}) // "
Hello World
复制代码 代码如下:
"
如果变量的值包含五个特殊字符(& < > ” ‘ /),就需要用<%- … %>转义。
复制代码 代码如下:
var txt = "
<%- word %>
复制代码 代码如下:
"; _.template(txt, {word : "H & W"}) //
H & W
JavaScript命令可以采用<% … %>的形式插入。下面是判断语句的例子。
复制代码 代码如下:
var txt = "<% var i = 0; if (i<1){ %>" + "<%= word %>" + "<% } %>"; _.template(txt, {word : "Hello World"}) // Hello World
常见的用法还有循环语句。
复制代码 代码如下:
var list = "<% _.each(people, function(name) { %>
<%= name %> <% }); %>”; _.template(list, {people : [‘moe', ‘curly', ‘larry']}); // “
moe
curly
larry”
如果template方法只有第一个参数templateString,省略第二个参数,那么会返回一个函数,以后可以向这个函数输入数据。
复制代码 代码如下:
var t1 = _.template("Hello <%=user%>!"); t1({ user: "" }) // 'Hello !'
data
templateString中的所有变量,在内部都是obj对象的属性,而obj对象就是指第二个参数data对象。下面两句语句是等同的。
复制代码 代码如下:
_.template("Hello <%=user%>!", { user: "" }) _.template("Hello <%=obj.user%>!", { user: "" })
如果要改变obj这个对象的名字,需要在第三个参数中设定。
复制代码 代码如下:
_.template("<%if (data.title) { %>Title: <%= title %><% } %>", null, { variable: "data" });
因为template在变量替换时,内部使用with语句,所以上面这样的做法,运行速度会比较快。
您可能感兴趣的文章: