作家
登录

如何实现一个基于DOM的模板引擎

作者: 来源: 2017-08-14 09:13:04 阅读 我要评论

  •     }); 
  •  
  •     return dependencies; 
  •  
  • 经由过程正则表达式 dependencyRE 匹配出可能的变量依附后,还要进行一些比较,比如是否是全局变量等等。效不雅如下:

    其实该函数只做了两件事:

    • 遍历该节点的所有属性,经由过程断定属性类型的不合来做不合的操作,断定的标准就是属性名是否是冒号 : 开首并且属性的值不为空;
    • 绑定响应的指令去更新属性。
    1. extractDependencies(`typeof String(name) === 'string'  && 'Hello ' + world + '! ' + hello.split('').join('') + '.'`); 
    2. // => ["name""world""hello" 

    这恰是我们须要的结不雅,typeof, String, split 和 join 并不是 data 中所依附的变量,所以不须要被提掏出来。

    generate

    1. export function generate(expression) { 
    2.     const dependencies = extractDependencies(expression); 
    3.     let dependenciesCode = ''
    4.  
    5.     dependencies.map(dependency => dependenciesCode += `var ${dependency} = this.get("${dependency}"); `); 
    6.  
    7.     return new Function(`data`, `${dependenciesCode}return ${expression};`); 
    8.  

    我们提取变量的目标就是为了在 generate 函数中生成响应的变量赋值的字符串便于在 generate 函数中应用,例如:

    1. new Function(`data`, ` 
    2.     var name = data["name"]; 
    3.     var world = data["world"]; 
    4.     var hello = data["hello"]; 
    5.     return typeof String(name) === 'string'  && 'Hello ' + world + '! ' + hello.split('').join('') + '.'
    6. `); 
    7.  
    8. // will generated: 
    9.  
    10. function anonymous(data) { 
    11.     var name = data["name"]; 
    12.     var world = data["world"]; 
    13.     var hello = data["hello"]; 
    14.     

        推荐阅读

        雷军开造空调正面挑战董明珠?小米说只是生态链

      曾经和格力电器董事长董明珠有10亿赌约的小米,要做空调了? 8月10日,小米智能硬件生态链企业智米科技宣布了一款售价4399元的全直流变频空调,但品牌不是“小米&rdqu>>>详细阅读


      本文标题:如何实现一个基于DOM的模板引擎

      地址:http://www.17bianji.com/lsqh/36664.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)