js中模板化开发,text/template

JavaScript标签中有时候会看见<script type="text/tmplate" >,大概就是一个放置模板的地方,而这些东西并不显示在页面,我们暂且就把它当成一个容器.百度查了一下也没查到怎么个用法,所以自己就写了一下代码,以便应用这些模板内容。

我们举个例子,在script标签中创建一个模板.

<script type="text/tmplate" id="tmp">
    <div>
        <ul>
            <li class="{name}">姓名:{name}</li>
            <li>年龄:{age}</li>
            <li>电话:{phone}</li>
        </ul>
    </div>
< /script>

这就是等下我们要用的模板,为了能使用模板中的内容{string},我们需要写js,大概原理就是,我们取模板的内容,正则匹配出所有的内容,然后用其他的东西替换掉,把替换后的字符串放置到另一个容器中。那我们就来创建一个函数

function getTemplate(tplID){
    var _this=this;         //保存自身指针
    var assignArr=[];       //定义一个哈希数组,存放assign的k,v
    var config={           //配置项
        limitL:"{",
        limitR:"}",
        voidModify:'',      //如果模板元素无值,则显示为空
    }
    var limitArr={          //私有变量,存储转义定界符
            '<':'&lt;',
            '>':'&gt;',
        };
    var encodeLimter=function(str){     //私有方法,转义字符
            for(var tmp in limitArr){
                if(str.search(tmp)>=0){
                    str=str.replace(tmp,limitArr[tmp]);
                }
            }
            return str;
        };
    this.action={                       //公有方法,修改定界符,空参数
        setLimitL:function(str){
            config.limitL=encodeLimter(str);
            return _this;
        },
        setLimitR:function(str){
            config.limitR=encodeLimter(str);
            return _this;
        },
        setVoidModify:function(str){
            config.voidModify=str;
            return _this;
        }
    }
    this.assign=function(key,value){
        //赋值,创建带有定界符哈希数组
        assignArr[config.limitL+key+config.limitR]=value;
        return this;
    };
    this.display=function(elementID){
        try{
            var targetID=elementID||tplID;          //如果elementID为空,说明模板容器与放置容器是同一个
            var tmplate=document.getElementById(tplID).innerHTML;  //获取模板容器的内容
            var ptn=new RegExp(config.limitL+'(\\w+)?'+config.limitR,'g');    //创建正则表达式
            var tmpRegArr=tmplate.match(ptn);               //存储所有符合条件的模板元素
            for(var i=0;i<tmpRegArr.length;i++){
                //移除模板内容中的标签,替换为值
                var changeStr=assignArr[tmpRegArr[i]]||config.voidModify;
                tmplate=tmplate.replace(tmpRegArr[i],changeStr);
            }
        }catch(e){
            console.log(e.message);
            console.log("The limit code is not accord with your set");
        }
        document.getElementById(targetID).innerHTML= tmplate;
        return this;
    }
};

当我们要应用模板的时候,我们需要有一个<div id="Container"></div>,然后应用我们创建的函数去加载模板

<script type="text/javascript">
    //首先我们创建一个对象存储数据,当然也可以不创建,使用assign函数来赋值
    var tmpObj={
        name:'萧十三楼',
        age:25,
        phone:18888888888,
        QQ:905519160
    }

   //首先我们需要创建一个新的对象
    var container=new getTemplate('tmp');
        for(var tmp in tmpObj){

//通过for循环,把数据中的值赋值到模板标签里面
            container.assign(tmp,tmpObj[tmp]);
        }

//加载放置容器
    container.display('container');
< /script>


还有另一个写法是,我们在html中创建模板,然后替换他本身

<div id="el">
    <ul>
        <li class="{class}">姓名:{name}</li>
        <li>年龄:{age}</li>
        <li>电话:{phone}</li>
        <li>QQ:{QQ}</li>
    </ul>
< /div>

<script type="text/javascript">
//html标签做模板
var elObj={
        name:'萧十二楼',
        phone:18815285569,
        class:'show',
        QQ:905519160
    }
var el=new getTemplate('el');

//我们可以修改配置项,让值为空的模板标签显示出我们想要的结果,默认为空
   el.action.setVoidModify('值为空')
        .action.setLimitL('<{')
        .action.setLimitR('}>');


    for(var tmp in elObj){
        el.assign(tmp,elObj[tmp]);
    }
 

//display不写参数,则模板项与放置项是同一个容器
    el.display();

</script>

这样我们就可以把模板中的内容应用出来,如果需要有大量赋值的情况下,应用这种方法还是很方便的,当然现在有很多的开发框架,这个只是给大家一个参考,让大家明白,我们还可以这么做。

完整版代码:

<!DOCTYPE html>
<html>
<head>
<title>js模板加载</title>
</head>
<body>
<script type="text/javascript">
/*
* getTemplate(id tplID)  参数,模板容器的id
* getTemplate.assign(key,value)  赋值,将数据赋值到模板中
* getTemplate.display(str elementID)   加载模板内容,将模板内容放置到elementID中
*           如果elementID为空,说明模板容器与放置容器是同一个
* getTemplate.action.setLimitR/setLimitL(str)  设置左右定界符
*
*/


function getTemplate(tplID){
    var _this=this;         //保存自身指针
    var assignArr=[];       //定义一个哈希数组,存放assign的k,v
    var config={           //配置项
        limitL:"{",
        limitR:"}",
        voidModify:'',      //如果模板元素无值,则显示为空
    }
    var limitArr={          //私有变量,存储转义定界符
            '<':'&lt;',
            '>':'&gt;',
        };
    var encodeLimter=function(str){     //私有方法,转义字符
            for(var tmp in limitArr){
                if(str.search(tmp)>=0){
                    str=str.replace(tmp,limitArr[tmp]);
                }
            }
            return str;
        };
    this.action={                       //公有方法,修改定界符,空参数
        setLimitL:function(str){
            config.limitL=encodeLimter(str);
            return _this;
        },
        setLimitR:function(str){
            config.limitR=encodeLimter(str);
            return _this;
        },
        setVoidModify:function(str){
            config.voidModify=str;
            return _this;
        }
    }
    this.assign=function(key,value){
        //赋值,创建带有定界符哈希数组
        assignArr[config.limitL+key+config.limitR]=value;
        return this;
    };
    this.display=function(elementID){
        try{
            var targetID=elementID||tplID;          //如果elementID为空,说明模板容器与放置容器是同一个
            var tmplate=document.getElementById(tplID).innerHTML;  //获取模板容器的内容
            var ptn=new RegExp(config.limitL+'(\\w+)?'+config.limitR,'g');    //创建正则表达式
            var tmpRegArr=tmplate.match(ptn);               //存储所有符合条件的模板元素
            for(var i=0;i<tmpRegArr.length;i++){
                //移除模板内容中的标签,替换为值
                var changeStr=assignArr[tmpRegArr[i]]||config.voidModify;
                tmplate=tmplate.replace(tmpRegArr[i],changeStr);
            }
        }catch(e){
            console.log(e.message);
            console.log("The limit code is not accord with your set");
        }
        document.getElementById(targetID).innerHTML= tmplate;
        return this;
    }
};


</script>
<script type="text/tmplate" id="tmp">
    <div>
        <ul>
            <li>姓名:{name}</li>
            <li>年龄:{age}</li>
            <li>电话:{phone}</li>
            <li>QQ:{QQ}</li>
        </ul>
    </div>
</script>
<div id="container"></div>
<!-- 分隔线 -->
<div id="el">
    <ul>
        <li class="{class}">姓名:<{name}></li>
        <li>年龄:<{age}></li>
        <li>电话:<{phone}></li>
        <li>QQ:<{QQ}></li>
    </ul>
</div>
<div id="el2"></div>


<script type="text/javascript">
    //text/tempLate 模板
    var tmpObj={
        name:'萧十三楼',
        age:25,
        phone:18888888888,
        QQ:905519160
    }
    var container=new getTemplate('tmp');
        for(var tmp in tmpObj){
            container.assign(tmp,tmpObj[tmp]);
        }
    container.display('container');
</script>


<script type="text/javascript">
//html标签做模板
var elObj={
        name:'萧十二楼',
        phone:18888888888,
        class:'show',
        QQ:905519160
    }
var el=new getTemplate('el');
    el.action.setVoidModify('值为空')
        .action.setLimitL('<{')
        .action.setLimitR('}>');


    for(var tmp in elObj){
        el.assign(tmp,elObj[tmp]);
    }
    el.display();
</script>


</body>
</html>


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: VS Code T4 模板是一种用于生成 JavaScript 代码的工具。它基于 T4(Text Template Transformation Toolkit)技术,允许开发者定义模板并在生成代码时将其应用于指定的数据。 使用 VS Code T4 模板生成 JavaScript 代码非常简单。首先,我们需要安装 "T4" 扩展插件,该插件提供了 T4 模板引擎的支持。安装完成后,我们可以创建一个新的 T4 模板文件,并在其编写模板代码。 T4 模板使用一种特殊的标记语法,类似于 HTML 的标签。我们可以在模板定义变量、循环、判断等逻辑,并根据需要生成相应的 JavaScript 代码。模板还可以包含外部引用的文件或库,以便在代码生成过程使用。 一旦模板编写完成,我们可以在模板文件上右键点击,并选择 "运行 T4 模板" 选项,或使用命令面板搜索并运行相应命令。这将触发模板引擎执行,根据模板和提供的数据生成 JavaScript 代码。 T4 模板可以根据我们定义的逻辑和数据生成任意数量的 JavaScript 代码文件。这为我们提供了一种自动生成重复代码的方式,在项目开发可以极大地提高效率和代码质量。 总之,VS Code T4 模板提供了一种方便的方式来生成 JavaScript 代码。通过定义模板和提供相应的数据,我们可以自动生成符合需求的 JavaScript 代码,减少重复工作并提高开发效率。无论是创建新项目、添加新功能还是生成测试数据,T4 模板都能为我们提供一种强大的辅助工具。 ### 回答2: VSCode是一款功能强大的文本编辑器,它提供了许多扩展插件,其包括T4模板生成JS。T4模板是一种用于生成代码的模板引擎,它使用C#或VB.NET编写模板代码,并通过内置的代码生成引擎将模板代码转换为最终的输出。 在VSCode使用T4模板生成JS非常简单。首先,我们需要安装T4模板插件。可以通过在VSCode的扩展商店搜索"T4 Template"来找到并安装这个插件。安装完成后,我们可以在VSCode的侧边栏找到T4模板生成器的图标。 接下来,我们需要创建一个T4模板文件。可以使用`.tt`作为扩展名来命名文件,并打开该文件进行编辑。在模板文件,我们可以使用C#或VB.NET编写代码块,并使用特定的语法来控制模板生成的过程。我们可以定义输入参数、循环结构、条件语句等,以生成不同的输出内容。 在T4模板生成JS代码的过程与生成其他类型的代码并无太大区别。我们可以在模板定义JS变量、函数、类等,并使用T4模板提供的代码生成功能来生成相应的JS代码。 当模板文件的代码编写完成后,我们可以保存文件并触发模板生成过程。在VSCode的命令面板,输入"T4 Template"并选择生成模板命令,就可以将模板文件转换为对应的JS代码文件。 总结来说,使用VSCode的T4模板插件可以方便地生成JS代码。我们只需要编写模板文件,定义所需的JS代码结构和逻辑,然后由T4模板生成器自动转换为最终的JS代码文件。这样,我们可以更高效地生成大量的JS代码,并减少手工编写的工作量。 ### 回答3: VSCode是一款功能强大的代码编辑器,它支持通过T4模板生成JavaScript代码。 T4模板是一种文本生成引擎,它允许我们根据定义的模板规则生成特定的代码文件。在VSCode使用T4模板生成JavaScript代码可以提高开发效率和代码质量。 首先,我们需要安装VSCode的T4模板插件,可以在VSCode的插件市场搜索并安装。安装完成后,我们可以在VSCode的扩展面板找到并启用T4模板相关功能。 接下来,在VSCode创建一个新的文件,并将其命名为T4模板文件,通常以.tt作为文件扩展名。在T4模板文件,我们可以使用类似于ASP.NET的标签语法来定义模板的输入和输出。 在模板文件,我们可以定义输入参数,例如要生成的JavaScript文件的名称和路径。然后,可以使用T4模板提供的标签和指令,通过循环、条件语句和字符串操作等方式来生成JavaScript代码。 使用T4模板生成JavaScript代码的好处是我们可以根据不同的需求和条件生成不同的代码。这样可以提高代码的可维护性和复用性。同时,T4模板还支持自定义函数和引用外部库,可以更灵活地生成JavaScript代码。 最后,我们可以通过执行模板文件来生成JavaScript代码。在VSCode,我们可以打开T4模板文件,右键点击并选择“转换为输出文件”,这将会根据模板文件的定义生成相应的JavaScript代码文件。 总结起来,通过VSCode的T4模板插件,我们可以方便地生成JavaScript代码。通过定义模板规则和执行模板文件,我们可以根据需求快速生成高质量的JavaScript代码。这对于JavaScript开发者来说是一个非常有用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值