zoukankan      html  css  js  c++  java
  • 简易JavaScript模板

    设计目的:非常单纯,减少JS代码中的字符串拼接,让代码变得更加易读和可维护,尤其是代码已经非常庞大的情况下。

    /*
     * @description An Easy Template in JavaScript, it is designed to reduce the string concatention work,
     * to make the gigantic code more readable and maintainable.
     
    */
    function Template(tmpl,source){
        //add all template tasks to this array
        this.task = [];
        if(tmpl)
            this.task.push([tmpl,source]);
    }
    /*
     * @description core function,hanlde two cases: typeof dataSource is either object or array
     *  when the type of dataSource is array,you'd better confirm that the fields in every object is the same.
     
    */
    Template.format = function(template,dataSource){
        //default variable flags
        var start = '{', end = '}';
        if(dataSource && dataSource.slice && dataSource.length){
            var retStr = [], formatted, len = dataSource.length, regMap = {};
            //restore the RegExp,avoid to construct them repeatedly.
            for(var regKey in dataSource[0]){
                regMap[regKey] = new RegExp(start + regKey + end,'g');
            }
            for(var index in dataSource){
                formatted = template;
                for(var key in dataSource[index]){
                    formatted = formatted.replace(regMap[key],String(dataSource[index][key]));
                }
                retStr.push(formatted);
            }
            return retStr.join('');
        }else{
            for(var key in dataSource){
                template = template.replace(new RegExp(start + key + end,'g'),String(dataSource[index][key]));
            }
            return template;
        }
    };
    Template.prototype.add = function(tmpl,source){
        //add one template task
        this.task.push([tmpl,source]);
    };
    /*
     * @description handle all tasks,and return the final string.
     *  when this method is invoked,you can reuse the instance.
     
    */
    Template.prototype.end = function(){
        var retStr = [];
        for(var index in this.task){
            retStr.push(Template.format(this.task[index][0],this.task[index][1]));    
        }
        this.task.length = 0;
        return retStr.join('');

    }; 

    简单的例子:

    <!doctype html>
    <html>
    <head>
        <script src="jTemp.js"></script>
    </head>
    <body>
            <ul id="MenuItems">
                <li class="nav"><href="{href}">{text}</a></li>                
            </ul>
            <script>
                var ul = document.getElementById('MenuItems');
                var dataSource = [
                    {text:'首页',href:'http://www.oschina.net/'},
                    {text:'开源软件',href:'http://www.oschina.net/'},
                    {text:'讨论区',href:'http://www.oschina.net/'},
                    {text:'代码分享',href:'http://www.oschina.net/'},
                    {text:'资讯',href:'http://www.oschina.net/'},
                    {text:'博客',href:'http://www.oschina.net/'},
                    {text:'Android',href:'http://www.oschina.net/'}
                ];
                var tmpl = new Template(ul.innerHTML,dataSource);
                ul.innerHTML = tmpl.end();
            </script>
    </body>

    </html> 

  • 相关阅读:
    数据库01
    并发编程6
    并发编程5
    并发编程4
    并发编程3
    并发编程2
    并发编程1
    kali 下文件操作
    kali driftnet
    2017.1.1
  • 原文地址:https://www.cnblogs.com/1000/p/2340578.html
Copyright © 2011-2022 走看看