Nodejs高扩展性的模板引擎 functmpl简介


Posted in NodeJs onFebruary 13, 2017

关于functmpl

functmpl 是一个基于JavaScript/Nodejs的高扩展性的模板引擎

模板格式

<#包含/>

如果想在一个模板中插入另一个模板,可以使用<#包含/>

比如插入模板 a.ftl :

<#"a.ftl"/>

<@功能/>

除了输出变量、包含模板外,也可以加入更多自定义的功能,比如:枚举、赋值

但额外的功能需要自定义。

自定功能的具体格式为

<@功能名称 参数名=参数值/>
<@功能名称 参数名=参数值>
    子节点
</>
其中,参数名/参数值可以没有或者含有多对。

参数值可以是变量名,或者是JSON

子节点内容可以是普通内容、<=输出/>、<#包含/>或者<@功能/>

<`表达式`>

如果只是执行表达式,可以使用<`表达式`>

<`=输出`>

如果想输出一个变量的值,可以使用<=输出/>

比如输出变量 val 的值

<\`=val\`>

如何使用

获得functmpl

使用npm 或者 git

npm install functmpl
git clone git@github.com:wangchenxunum/functmpl.git
git clone git@git.oschina.net:wangchenxunum/functmpl.git

引入到Nodejs

let functmpl = require('functmpl');

引入到浏览器

<script src="functmpl.js"></script>

模板解析器实例

//创建一个解析器
let ftl = functmpl();
//加入功能处理器
ftl.use(functmpl.func);
//模板解析
ftl.template = '<!DOCTYPE html>\n\
<html>\n\
<head>\n\
  <title><`=title`></title>\n\
</head>\n\
<body>\n\
  <@enum key="key" value="value" var=list>\n\
    <@scope>\n\
      <@set key="key" value="1" type="create"/>\n\
      <`=key`>:<`=value`><br>\n\
    </>\n\
    <`=key`>:<`=value`><br>\n\
  </>\n\
</body>\n\
</html>'
//设置模板位置如果使用<#包含/>,必须要有一个基本的相对位置
ftl.filename = 'template.ftl';
//也可以直接读取模板文件
ftl.loadFile('template.ftl',function(status){
  if (status) {
    //读取文件成功,并且已经解析
    //调用模板生成数据
    ftl.parse(function(text){
      //当生成完毕后调用回调函数
      console.log("生成完成:\n" + text);
    },JSON.parse(data.value));
  } else {
    //读取文件失败
  }
});
NodeJs 相关文章推荐
Nodejs学习笔记之NET模块
Jan 13 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
详解nodejs 文本操作模块-fs模块(二)
Dec 22 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
深入理解Nodejs Global 模块
Jun 03 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 NodeJs
Nodejs 发送Post请求功能(发短信验证码例子)
Feb 09 #NodeJs
Nodejs实现短信验证码功能
Feb 09 #NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 #NodeJs
使用nodejs下载风景壁纸
Feb 05 #NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 #NodeJs
nodejs基础应用
Feb 03 #NodeJs
nodejs基础知识
Feb 03 #NodeJs
You might like
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
[54:41]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VGJ.T VS paiN
2018/03/31 DOTA
python中精确输出JSON浮点数的方法
2014/04/18 Python
python字典get()方法用法分析
2015/04/17 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
基于python实现从尾到头打印链表
2019/11/02 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
2020/10/15 Python
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
python自动化调用百度api解决验证码
2021/04/13 Python
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS