码迷,mamicode.com
首页 > 其他好文 > 详细

micro-template改造

时间:2015-10-06 20:52:07      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

(function ($) {
    $.fn.razor = function (data) {
        var render=$(this).data(‘razor‘);
        if (!render) {
            var html = $(this).html();
            var isNewEngine = ‘‘.trim;
            if (isNewEngine) {
                render = new Function("data",
              "var p=‘‘;" +
              "p+=‘" +
              html.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)‘/g, "$1\r").replace(/\t=(.*?)%>/g, "‘;p+=$1;p+=‘").split("\t").join("‘;").split("%>").join("p+=‘").split("\r").join("\\‘") + "‘;return p;");
            }
            else {
                render = new Function("data",
                 "var p=[];" +
                 "p.push(‘" +
                 html.replace(/[\r\t\n]/g, " ").split("<%").join("\t").replace(/((^|%>)[^\t]*)‘/g, "$1\r").replace(/\t=(.*?)%>/g, "‘,$1,‘").split("\t").join("‘);").split("%>").join("p.push(‘").split("\r").join("\\‘") + "‘);return p.join(‘‘);");
            }
            $(this).data(‘razor‘, render); 
        }
        return render(data);
    }
})(jQuery);

demo:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Razor模板引擎</title>
    <script src="Scripts/StringExtension.js"></script>
    <script src="Scripts/jquery-1.10.2.min.js"></script>
    <script src="Scripts/micro-template.js"></script>
    <script id="tmpl1" type="text/template">
        <ul>
            <%
            for(var i=0,j=data.length;i<j;i++){
                var item=data[i];%>
            <li><%=item.Name%></li>
            <%}%>
        </ul>
    </script>
    <script id="tmpl2" type="text/template">
        <table>
            <%
            for(var i=0,j=data.length;i<j;i++){ 
                var item=data[i];%>
                <tr><td><%=item.Name%></td></tr>
                <%}%>
        </table>
    </script>
    <script type="text/javascript">
        $(function () {
            var p = [];
            $(#tmpl1).razor(p);
            $(#tmpl2).razor(p);
            for (var i = 0; i < 10000; i++) {
                p.push({Name:xyz+i.toString().padLeft(0,4)});
            }

            console.time(render1);
            $(#content1).html($(#tmpl1).razor(p));
            console.timeEnd(render1);

            console.time(render2);
            $(#content2).html($(#tmpl2).razor(p));
            console.timeEnd(render2);
        });       
    </script>
</head>
<body>  
    <div id="content1"></div>
    <div id="content2"></div>
</body>
</html>

 

micro-template改造

标签:

原文地址:http://www.cnblogs.com/kingge/p/4857687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!