ITPub博客

首页 > 应用开发 > Javascript > 简易JS模板引擎怎么用?

简易JS模板引擎怎么用?

Javascript 作者:ii_chengzi 时间:2019-01-14 11:29:03 0 删除 编辑

一、语法

首先是选择模板语法,ejs语法是首选,因为大众,更无需去学习指令型模板引擎的那些东西。

如果写过 jsp 或者 asp/asp.net 的可以直接上手。

二、怎么用它

简易JS模板引擎怎么用?

想要像上图这么用,就得来分析一下怎么才能实现。

1.new Function

简易JS模板引擎怎么用?

new Function ([arg1[, arg2[, ...argN]],] functionBody)

functionBody 一个含有包括函数定义的JavaScript语句的字符串。

使用Function构造器生成的函数,并不会在创建它们的上下文中创建闭包;它们一般在全局作用域中被创建。

当运行这些函数的时候,它们只能访问自己的本地变量和全局变量,不能访问Function构造器被调用生成的上下文的作用域。(MDN)

也就是说:

可以用 new Function 来动态的创建一个函数,去执行某动态生成的函数定义js语句。

通过 new Function 生成的函数,作用域在全局。

那么传参有3种:把变量放到全局(扯淡)、函数传参、用call/apply把值传给函数的this。

用的是 call 来传值,如今想了想不太优雅,换成了用参数传递。也就是这样:

简易JS模板引擎怎么用?

到此为止,雏形有了,接下来看如何拆分。

先看模板:

简易JS模板引擎怎么用?

js 逻辑部分,由 <%%>包裹, js 变量的占位,由 <%= %>包裹,剩下的是普通的要拼接的html字符串部分。

也就是说,需要用正则找出的部分有3种:

(1)<%%> 逻辑部分的js内容

(2)<%=%> 占位部分的js内容

(3)其它的纯文本内容

其中第2项,js占位的部分,也属于拼接文本。所以可以放在一起,就是 js部分 ,拼接部分。

2.正则提取

这里先跟扩展一下关于伪数组方面的内容,以及浏览器的控制台如何看待伪数组:

简易JS模板引擎怎么用?

只要有 int类型的 length属性,有 function类型 的 splice属性, 那么浏览器就会认为他是一个数组。如果里面的其它属性按照索引来排序,甚至还可以像数组里面的项那样在控制台展示出来。

这个需要多次从模板中,把 js逻辑部分和文本依次提取出来。对于每一次提取,都要获取提取出的内容,本次匹配最后的索引项(用于提起文本内容)。所以本次选择了 RegExp.prototype.exec 。

简易JS模板引擎怎么用?

举个例子,RegExp.prototype.exec 返回的是一个集合(伪数组),它的类型是这样的:

简易JS模板引擎怎么用?

通过这样,就可以拿到匹配到的 js 逻辑部分,并通过 index 和本次匹配到的内容,来获取每个js逻辑部分之间的文本内容项。

要注意: 在全局匹配模式下,正则表达式会接着上次匹配的结果继续匹配新的字符串。

简易JS模板引擎怎么用?

简易JS模板引擎怎么用?

得到了js逻辑项和文本内容 ,就可以把他们拼在一起,来动态生成一个function。 要注意的是,文本内容中,包含 js占位项,这个地方要转换一下。

简易JS模板引擎怎么用?

这样就完成了简易的模板引擎,不要觉得拼字符串慢,在现代浏览器(IE8开始)中,特地对字符串的操作做了大量的优化,用 += 拼字符串,要比用数组 push 再 join 的方式快很多很多。

http://shenzhen.offcn.com/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31543790/viewspace-2554683/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-06-26

  • 博文量
    264
  • 访问量
    342573