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基本语法和类型
Feb 13 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
nodejs中解决异步嵌套循环和循环嵌套异步的问题
Jul 12 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 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生成数组再传给js的方法
2014/08/07 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
Python基于有道实现英汉字典功能
2015/07/25 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
大韩航空官方网站:Korean Air
2017/10/25 全球购物
.net开发工程师面试题
2014/02/25 面试题
建材业务员岗位职责
2013/12/08 职场文书
大学生的网上创业计划书
2013/12/31 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
中学生检讨书1000字
2014/10/28 职场文书
会计求职信怎么写
2015/03/20 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python