micro-template改造

(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>
时间: 2024-08-02 11:00:43

micro-template改造的相关文章

学习Js小结

跟着慕课网老师码代码,对于JS还是有不少陌生,需要大量的总结,任重而道远. 脚本功能开发: 内容输出:Template改造 输出幻灯片&控制按钮 图片位置调整 切换控制:切换幻灯片 .main-i_active 切换控制按钮 .ctrl-i_active 0.修改 View->Template(关键字替换),增加template id id=template_main {{index}}{{h2}}{{h3}} 切换幻灯片函数:switchSlide(); 1.数据定义(实际生产环境中,应由

《开源框架那点事儿25》:对框架模板引擎实现方式的改造实录

点滴悟透设计思想,Tiny模板引擎优化实录! 增加框架设计兴趣小组:http://bbs.tinygroup.org/group-113-1.html Tiny模板引擎的实现方式原来是採用的编译方式,近期发生了一些问题.因此我认为有必要把编译方式调整为解释方式,为此就開始了此次实现活动. 编译方式存在的问题 当时採用编译方式.主要是考虑到编译方式在执行时不必再去遍历语法树.因此就採用了编译方式. 可是在实际应用其中,出现了例如以下问题: 文件路径冲突的问题 因为採用的是编译方式,这个时候就存在在

简单直接的CUDA改造

把前一篇中的MNIST数据识别程序进行了简单的CUDA改造,得到的结果很差,一个epoch从大约5秒变成了50秒. 也可以理解,我把每个操作(比如mul, add)单独拎出来实现,结果由于不知道自己的上下文,就不要不断的 __syncthreads. 不过还是有一些收获,第一次写CUDA程序,最终还是基本保证了程序的正确性. // 修正: 5秒和50秒的对比有错,因为两个网络的结构不一样,把之前的网络改成和CUDA程序一样的网络之后,时间变成了 30 vs 50,CUDA还是慢一些. 1 #in

Nodejs之MEAN栈开发(五)-- Angular入门与页面改造

这个系列一共会涉及两个JavaScript框架的讲解,一个是Express用做后端,一个是Angular用于前端.和Express一样,Angular分离内容,处理视图.数据和逻辑.和MVC模式很相似,但其实Angular定义是MVW框架,W代表(what ever works for you).意味着它可以是控制器或者视图模型,或者服务,就看你怎么定义的.这一节会介绍基本的Angular知识:然后改造我们之前做的页面:并且调用之前的定义的api来获取数据. Angular的数据绑定是指视图的改

开源框架那点事儿25》:对框架模板引擎实现方式的改造实录

点滴悟透设计思想,Tiny模板引擎优化实录! Tiny模板引擎的实现方式原来是采用的编译方式,最近发生了一些问题,因此我觉得有必要把编译方式调整为解释方式,为此就开始了此次实现活动. 编译方式存在的问题 当时采用编译方式,主要是考虑到编译方式在运行时不必再去遍历语法树,因此就采用了编译方式.但是在实际应用当中,出现了如下问题: 文件路径冲突的问题 由于采用的是编译方式,这个时候就存在在一个选择,即:Java源代码落地或不落地的选择.如果Java文件不落地,则在有问题的时候,如果想要进行代码调试(

【实用】教你如何改造 zblog MIP 模板

很多人都问过我,咖啡你的MIP主题模板到底怎么改的.我就和zblog那些开发者交流了下.zblog的MIP改造非常简单.今天就免费给大家献上改造方案. 好了,直接进入正题!模板文件MIP规范自己改,不多说. 模板目录下的include.php文件打开: 比如我的模板include.php文件是 这里就加上这句: Add_Filter_Plugin('Filter_Plugin_ViewPost_Template','kfmip_ViewPost_Content'); //kfmip_//这个改成

对C++的改造#2 属性(2)

这次这篇就讲一下怎么把之前定义的属性变平滑,我之前就说了,把能重载的运算符都重载一遍就行了 单目运算符: #define OPERATOR1(op) \ template<class T> auto operator op (const Property<T>& l) -> decltype(op l->get()){ return op l.get(); } OPERATOR1(!); OPERATOR1(~); OPERATOR1(*); //不建议重载取地

Java事务(四) - 使用模板模式改造事务处理

一. 前言: 在上一篇博文中, 我们使用TransactionManager和ThreadLocal完成线程安全的事务管理,不知大家有没有发现,AccountService代码充斥着很多事务处理的代码,其实这些代码在很多方法里面都是重复出现,我们可以使用Template模式进行优化. 二. 实现: 1. 写一个模板类:TransactionTemplate /** * 模板类 */ public abstract class TransactionTemplate { public void d

Orchard模块开发全接触5:深度改造前台第二部分

在这一部分,我们继续完善我们的购物车,我们要做以下一些事情: 1:完成 shoppingcart.cshtml: 2:让用户可以更新数量及从购物车删除商品: 3:创建一个 widget,在上面可以看到商品数量,并且能链接到购物车: 同时,我们会接触到以下技术点: 1:熟悉 IContentManager.GetItemMetadata: 2:通过 IResourceManifestProvider 来包含 resources: 3:使用 KnockoutJS and jQuery,并且应用 MV

ES6 Features系列:Template Strings &amp; Tagged Template Strings

1. Brief ES6(ECMAScript 6th edition)于2015年7月份发布,虽然各大浏览器仍未全面支持ES6,但我们可以在后端通过Node.js 0.12和io.js,而前端则通过Traceur或Babel这类Transpiler将ES6语法预转译为ES5语法,来提前兴奋一把.而仅需适配IE9+的朋友们现在更是可以开始撸ES6了,而不必为学哪门JavaScript超集语言而烦恼.(ES6又名为ECMAScript 2015或JavaScript.next,ES4的部分较为激进