underscore模板功能的使用和学习

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

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

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

因而后台那位耿直的兄弟真的就去这么作了,把全部的接口都是封装成json格式的数据给到我。git

开始干活了,一开始个人处理方法是用ajax请求到数据后,拿出来放到本身的函数中使用js操做dom完成各类需求。越写就会github

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

使用相似于jsp的写法<%=item.film%>来替换json中对应的数据,不只使得数据与页面分离开来,还很好的提升了代码的可维正则表达式

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

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

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

相关文章
相关标签/搜索