6.14 template
6.14.1 语法
_.template(templateString, [settings])
6.14.2 说明
将 JavaScript 模板编译为可以用于页面呈现的函数, 对于通过JSON数据源生成复杂的HTML并呈现出来的操作非常有用。
6.14.3 代码示例
示例一:基本用法
var compiled = _.template('hello: <%= name %>'); //返回的是一个函数
compiled({name: 'moe'}); //这个函数里传入数据
//=> "hello: moe"
示例二:使用循环
<script type="text/html" id="template"></script>
var template = document.getElementById('template').text;
var data = {
list: [{
name: 'moe'
}, {
name: 'dato'
}]
};
console.log(_.template(template)(data));
// =>
// <ul>
// <li>moe</li>
// <li>dato</li>
// </ul>
示例三:使用三元表达式
<script type="text/html" id="template"></script>
var template = document.getElementById('template').text;
var data = {
list: [{
name: 'moe',
isPass : true
}, {
name: 'dato'
}]
};
console.log(_.template(template)(data));
//=>
// <ul>
// <li>moe - 已通过</li>
// <li>dato - 未通过</li>
// </ul>
示例四:使用if else
<script type="text/html" id="template"></script>
var template = document.getElementById('template').innerHTML;
var data = {
list: [{
name: 'moe',
isPass : true
}, {
name: 'dato'
}]
};
console.log(_.template(template)(data));
//=>
// <ul>
// <li>moe</li>
// </ul>
示例五:调用方法
可以将值调用一个方法,进行转换
<script type="text/html" id="template"></script>
var template = document.getElementById('template').text
var data = {numbers : [-1, -2, 3]};
console.log(_.template(template)(data));
//=>
// <li>1</li>
// <li>2</li>
// <li>3</li>
示例六:escape转换html
var template = '<%- html %>';
_.template(template)({html : 'more >'}); //=> "more >"
6.14.4 print的妙用
var compiled = _.template('Hello ' + '<%= epithet %>');
compiled({epithet: "stooge"}); //=> "Hello stooge"
//使用print后
var compiled2 = _.template("<% print('Hello ' + epithet); %>");
compiled2({epithet: "stooge"}); //=> "Hello stooge"
6.14.5 换掉尖括号
//强制覆盖
_.templateSettings.interpolate = /\{\{(.+?)\}\}/g
var template = _.template("Hello {{ name }}!");
template({
name: "Mustache"
});
//=> "Hello Mustache!"
6.14.6 换掉尖括号,传settings
var settings = {
interpolate : /\{\{(.+?)\}\}/g
};
var template = _.template("Hello {{ name }}!", settings);
template({
name: "Mustache"
});
//=> "Hello Mustache!"
6.14.7 _.templateSettings
_.templateSettings = {
//evaluate标签中间的表示为可执行的js代码
evaluate: /<%([\s\S]+?)%>/g,
//interpolate表示输出一个js运行结果的值
interpolate: /<%=([\s\S]+?)%>/g,
//escapte表示输出这个变量的值并进行html标签过滤,如将相关的字符"<"转化为"<"
escape: /<%-([\s\S]+?)%>/g
};