Velocity模板引擎,JavaScript和PHP两个版本。Apache官方Java版本见velocity.apache.org。
快速使用
JavaScript版本
引入velocity.js文件(支持模块化)后,全局变量velocity(如果是模块则导出该变量)包含两个property:render纯函数、compile纯函数。
模板渲染
render方法将一个vm模板字符串和一个数据对象合成一段字符串,例如:
var tmpl = 'My name is ${name}. I\'m a #if($gender == "male")boy#{else}girl#end.';
var data = {
name: 'June',
gender: 'female'
};
window.velocity.render(tmpl, data); // "My name is June. I'm a girl."
模板编译
compile方法将一个vm模板字符串编译成一个函数(或函数体字符串,用于写入js文件),例如:
var tmpl = 'My name is ${name}. I\'m a #if($gender == "male")boy#{else}girl#end.';
var render = window.velocity.compile(tmpl);
var render_raw = window.velocity.compile(tmpl, { raw: true }); // 第二个参数为配置项,raw为true则返回字符串
var data = {
name: 'June',
gender: 'female'
};
render(data); // "My name is June. I'm a girl."
(new Function(render_raw))(data); // "My name is June. I'm a girl."
PHP版本
引入velocity.php文件后,命名空间PhpVelocity的Main类通过构造方法设置编译路径和vm文件更新检查开关;通过render方法将指定路径的vm文件与数据合成字符串,并可设置清除以往数据。例如:
<?php
include './velocity.php';
use PhpVelocity\Main as Velocity;
$compile_dir = 'path/to/compiles';
$ve = new Velocity($compile_dir, true); // 设置编译路径,并在每次渲染前检查vm模板文件更新(默认不检查更新),如果有更新则重新编译
$data = array("name" => "June", "gender" => "female");
echo $ve->render('path/to/template1.vm', $data); // 渲染模板和数据
echo $ve->render('path/to/template2.vm'); // 渲染模板
$data = array("name" => "Apple", "price" => 10000);
echo $ve->render('path/to/template3.vm', $data, true); // 渲染模板和数据,清除以往数据
开发和测试
| 脚本 | 作用 |
|---|---|
/server.js |
运行WYSIWYG的web程序。 |
/run_tests.sh |
测试程序,负责运行各语言版本runner(目前是js与java两个版本的对比),监听runner输出文件变化,运行diff_output。 |
/diff_output.sh |
比较每个case的不同runner输出(目前是js与java两个版本的对比),输出报表。 |
/sync_dists.sh |
将src中的将各语言版本的velocity打包复制到build中和test中。 |
/build_*.js |
将/src/[javascript/php](对应语言版本源码目录)中的*.pegjs语法文件build成parser,与源码结合,生成/src/[javascript/php]/velocity.[js/php]。 |
项目结构
| 路径 | 含义 |
|---|---|
/src/antlr |
velocity的antlr范式开发。 |
/src/debug |
用于开发调试的web程序。 |
/src/* |
各语言版本的velocity实现源码,包括所有依赖。 |
/build/*/velocity.* |
各语言版本的velocity可执行程序,应由src打包。 |
/test/cases |
测试用例,每个case包含同名的一个.vm文件和一个.json文件。 |
/test/diff |
结果比较程序,比较各语言版本TestRunner的输出,并在该目录下生成result.html报表文件。 |
/test/*/src |
各语言版本的TestRunner源码;TestRunner运行时不需要输入参数,直接读取case文件并输出到各自output目录。 |
/test/*/run.sh |
各语言版本的测试运行脚本。 |
/test/*/output/*.html |
各语言版本的TestRunner的输出,每个输出文件对应一个case。 |
More
License
Copyright (c) 2017-present, shenfe