作家
登录

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

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

return typeof String(name) === 'string'  && 'Hello ' + world + '! ' + hello.split('').join('') + '.'
  •  
  • 如许的话,只须要在调用这个匿名函数的时刻传入对应的 data 即可获得我们想要的结不雅了。如今回过火来看之前的 Directive 部分代码应当就一目了然了:

    1. export default class Directive { 
    2.     constructor(options = {}) { 
    3.         // ... 
    4.         this.beforeUpdate && this.beforeUpdate(); 
    5.         this.update && this.update(generate(this.expression)(this.compile.data)); 
    6.     } 
    7.  

    generate(this.expression)(this.compile.data) 就是表达式经由 this.compile.data 计算后我们所须要的值。

    compile text node

    有没有发明编写一个指令其实异常的简单,然后我们就可以这么应用我们的 text 指令了:

    我们前面只讲了若何编译 node.nodeType === 1 的元素节点,那么文字节点若何编译呢,其实懂得了前面所讲的内容话,文字节点的编译就R单得不克不及再简单了:

    1. /** 
    2.  * compile text node 
    3.  * 
    4.  * @param {Node} node 
    5.  */ 
    6. Compile.compile.textNodes = function (node) { 
    7.     if (node.textContent.trim() === ''return false
    8.  
    9.     this.bindDirective({ 
    10.         node, 
    11.         name'text'
    12.         expression: parse.text(node.textContent), 
    13.     }); 
    14. };  

    经由过程绑定 text 指令,并传入解析后的 JavaScript 表达式,在 Directive 内部就管帐算出表达式实际的值并调用 text 的 update 函数更新视图完成衬着。

    :each 指令

    到今朝为止,该模板引擎只实现了比较根本的功能,而最常见且重要的列表衬着功能还没有实现,所以我们如今要实现一个 :each 指令来衬着一个列表,这里可能要留意一下,不克不及按照前面两个指令的思路来实现,应当换一个角度来思虑,列表衬着其实相当于一个「子模板」,琅绫擎的变量存在于 :each 指令所接收的 data 这个「局部感化域」中,这么说可能抽象,直接上代码:

    1. // :each updater 
    2. import Compile from 'path/to/compile.js'
    3. export default { 
    4.     beforeUpdate() { 
    5.         this.placeholder = document.createComment(`:each`); 
    6.         this.node.parentNode.WordStrChild(this.placeholder, this.node); 
    7.     }, 
    8.     update() { 
    9.         if (data && !Array.isArray(data)) 

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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