javascript模板引擎

使用方式一:javascript

var _template = '<div>\
          姓名:<$= GlobalData.name $><br/>\
          年齡:<$= GlobalData.age $>\
    </div>';
template.replace(_template,{
    name:"張三",
    age:30
});

結果:html

<div>
   姓名:張三<br/>
   年齡:30
</div>

使用方式二:java

var _template = '<div>\
    <$ var list = GlobalData.list; $>\
    <h2><$= GlobalData.title $></h2>\
    <ul>\
           <$ for(var i = 0,l = list.length;i < l;i++){\
               var item = list[i]; $>\
               <li>\
                   <dl>\
                       <dt>手機</dt>\
                       <dd><$= item.phone $></dd>\
                       <dt>用戶名:</dt>\
                       <dd><$= item.name $></dd>\
                   </dl>\
            </li>\
        <$ } $>\
    </ul>\
</div>';
template.replace(_template,{
    list:[
        { phone:13500000000, name:"張三" },
        { phone:13500000000, name:"李四" }
    ],title:"手機列表"
});

結果:json

使用方式三:spa

var _template = '<div>\
    <$ var list = GlobalData.list; $>\
    <h2><$= GlobalData.title $></h2>\
    <ul>\
           <$ for(var i = 0,l = list.length;i < l;i++){\
               var item = list[i]; $>\
               <li>\
                   <dl>\
                       <dt>手機</dt>\
                       <dd><$= item.phone $></dd>\
                       <dt>用戶名:</dt>\
                       <dd><$= GlobalData.formatter(item.name) $></dd>\
                   </dl>\
            </li>\
        <$ } $>\
    </ul>\
</div>';
template.replace(_template,{
    list:[
        { phone:13500000000, name:"張三" },
        { phone:13500000000, name:"李四" }
    ],
    title:"手機列表",
    formatter:function(val){
        return val + " format";
    }
});

結果:code

從結果上能夠看出,在<$ $>中編寫任何javascript都是有效的,<$= $>提供輸出而且也支持javascript。orm

GlobalData做爲模板中的惟一入口,json格式可無限擴展,也就有了無限可能。htm

代碼部分:blog

 1 var template = {
 2     replace: function (pTemplate, pData) {
 3         var cache = {};
 4         var t = parse(pTemplate);
 5         if (t) {
 6            return t(pData);
 7         } else {
 8            return "";
 9         }
10         function parse(pTemplate) {
11            if (!cache[pTemplate]) {
12                var __list__ = [];
13                cache[pTemplate] = eval("(function(){return function(GlobalData){var __result__ = [];" + ("$>" + pTemplate + "<$").replace(/<\$= ([\s\S]*?) \$>/g, function (a, b) {
14                    return "<$ __result__.push(" + b + "); $>";
15                }).replace(/\$>([\s\S]*?)<\$/g, function (a, b) {
16                    if (/^\s*$/.test(b))
17                        return "";
18                    else
19                        return "__result__.push(__list__[" + (__list__.push(b) - 1) + "]);";
20                }) + "return __result__.join('');}})()");
21            }
22            return cache[pTemplate];
23         }
24     },
25     render: function (pTemplate, pData) {
26         var _html = pTemplate;
27         return _html.replace(/\$\{.*?\}/g, function (a, b) {
28             var _key = a.replace(/\$|\{|\}/g, "");
29             return pData.hasOwnProperty(_key) ? pData[_key] : a;
30         });
31     }
32}

 

PS:有彩蛋ip

相關文章
相關標籤/搜索