早上写得1个Template得简单实现。但现在只能实现变量插入,函数调用。想加入if else 判断 for循环,但是正则表达式只是半桶水。没办法做下去。如果能有人补充下去就好了。无比感谢。
<script LANGUAGE="JavaScript">
<!--
Date.prototype.format = function(format){
var o = {
"M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond
}
if(/(y+)/.test(format)) {
format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o){
if(new RegExp("("+ k +")").test(format)){
format = format.replace(RegExp.$1,RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
}
}
return format;
};
function formatDate(date, format){
var yr = date.substring(0,4);
var mh = date.substring(4,6);
var dy = date.substring(6,8);
var d = new Date();
d.setYear(yr);
d.setMonth(mh-1);
d.setDate(dy);
return d.format(format);
}
function formatMoney(prefix, amount){
return prefix + amount;
}
function add(a,b){
return a+b;
}
function multiply(a,b){
return a*b;
}
var tplText = [
' attr1: ${attr1}\n',
' attr2.attr21: ${attr2.attr21}\n',
' test date : #formatDate(${date}, \'yyyy-MM-dd\') \n',
' test currency: #formatMoney("Y",1000)\n',
' test add : #add(${num1},${num2})\n',
' test multiply : #multiply(#add(30,40), #add(2,3))\n'
].join();
var root = {
attr1 : 'val1',
attr2 : {
'attr21' : 'val21'
},
date : '20080812',
num1 : 10,
num2 : 20
}
function Template(tpl){
this.tpl = tpl;
this.throwUndefError = false;
}
Template.prototype = {
apply : function(dataModel){
var _freg = /#[a-zA-Z0-9]+\(([^\(\)]*)\)/g;
var _vreg = /\$\{([a-zA-Z0-9\.]+)\}/g;
var _root = dataModel;
var fn;
var _msg = [], _isMsg = this.throwUndefError;
while(this.tpl.match(_freg)){
this.tpl = this.tpl.replace(_freg, function(){
fn = arguments[0];
fn = fn.replace(_vreg, function(){
var _value = eval('_root.'+arguments[1]);
if(_value){
if( 'string' == typeof _value ){
return '\''+eval('_root.'+arguments[1]) +'\'';
} else {
return _value;
}
} else if(_isMsg){
_msg.push(arguments[1]+' unexist!');
}
});
fn = fn.substring(1);
return eval(fn);
});
}
this.tpl = this.tpl.replace(_vreg, function(){
var _value = eval('_root.'+arguments[1]);
if(_value){
return eval('_root.'+arguments[1]);
} else if(_isMsg){
_msg.push(arguments[1]+' unexist!');
}
});
if( 0 != _msg.length){
alert('Error:\n'+_msg.join('\n'));
}
return this.tpl;
}
}
var tpl = new Template(tplText);
alert(tpl.apply(root));
//-->
</script>
分享到:
相关推荐
这里的"简单的template的js模板"就是一个这样的工具,它提供了一种优雅的方式来处理动态数据,比传统的字符串拼接方式更高效、更易读。 模板引擎的基本原理是通过特殊的语法(如Mustache风格的`{{ }}`或者EJS的`...
总之,ArtTemplate是一款优秀的JavaScript模板引擎,它凭借其出色的性能、安全的渲染方式和简单易用的特性,成为了前端开发者的得力工具。无论是在小型项目还是大型复杂应用中,都能看到ArtTemplate的身影。
Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...
- **循环语句**:除了简单的`for`循环,还支持`each`循环,如`, index %>`。 - **函数调用**:在`{{ }}`中可以调用自定义函数,处理复杂逻辑。 - **模板继承和部分**:通过`<%- %>`引入其他模板或部分,实现模板...
1. **数据绑定**:`template-web`允许开发者通过简单的语法将JavaScript对象中的数据绑定到HTML模板中,当数据变化时,页面会自动更新,实现了视图和模型的同步。 2. **模板语法**:`template-web.js`文件中包含了...
而lua-resty-template和大多数模板引擎是类似的,大体内容有: 模板位置:从哪里查找模板; 变量输出/转义:变量值输出...其他:lua-resty-template还提供了不需要解析片段、简单布局、可复用的代码块、宏指令等支持。
4. **简单API**: artTemplate 的API设计简洁,包括`template.compile`用于编译模板,`template.render`用于渲染数据,以及`template.helper`用于自定义辅助函数等。 5. **社区支持**: 虽然artTemplate相对较小,但...
总结,`artTemplate`作为一款高效的前端模板框架,通过简单的模板语法和预编译机制,降低了前端开发的复杂性,提升了页面性能。结合实例,我们理解了如何编写、预编译和使用`artTemplate`,这有助于我们在实际项目中...
在这个例子中,我们创建了一个简单的模板,用于循环显示数据数组`items`的内容。通过`template.compile()`编译模板后,用`data`渲染并将其结果插入到ID为`list`的`<ul>`元素中。 **模板引擎的比较与选择** `...
在本文中,我们将深入探讨如何使用Jquery插件Json2Template进行项目开发。Json2Template是一款基于jQuery的库,它允许开发者将JSON数据动态渲染为HTML模板,极大地提高了前端界面的数据展示效率。在学习和应用这个...
Vue.js的设计思想是让开发变得更加简单,同时保持了高性能。Vue-admin-template是一个基于Vue.js的后台管理模板,它提供了丰富的功能和组件,便于快速搭建企业级的后台管理系统。 "vue-admin-template-master-3.8.0...
下面是一个简单的使用ArtTemplate匿名数组`each`的示例: 首先,我们需要引入ArtTemplate库,这里我们用的是`template-web.js`。在HTML文件(如`basic.html`)中,你可以这样引入: ```html <script src="template-...
1. **简洁的语法**:artTemplate的语法设计简单直观,例如`{{变量名}}`用于输出变量,`{{#each 数组}}...{{/each}}`用于遍历数组,`{{if 条件}}...{{else}}...{{/if}}`用于条件判断。 2. **高效的性能**:由于art...
2. **简洁语法**:`art-template`提供了简单直观的模板语法,如`{{ }}`用于数据绑定,`{{#if}}`和`{{#each}}`用于条件和循环控制,使得开发者可以快速编写模板。 3. **分离关注点**:通过使用模板引擎,开发者可以...
vue-admin-template基础模板的简单使用
- **特点**:简单易懂,线程安全,但可能会造成资源浪费。 - **模板示例**: ```java private static final ${enclosing_type} m_instance = new ${enclosing_type}(); /** * 私有的默认构造子 */ private $...
- **示例运行环境**:可能是一个简单的HTML页面,包含了必要的脚本引用和数据绑定。 通过学习这个实例,你可以了解如何在实际项目中使用ArtTemplate4.x自定义函数,提升模板的动态渲染能力。例如,你可以创建一个...
2. **示例和教程**:可能包括`examples`目录,展示如何使用Template7的简单实例和说明文档。 3. **测试文件**:`tests`目录下的文件用于单元测试,确保模板引擎的功能正确无误。 4. **许可证文件**:`LICENSE`表明...
`artTemplate` 的设计理念是提供一种简单、高效的模板编译方式,使得在客户端或者服务器端都能流畅地使用。 `artTemplate` 的核心功能包括: 1. **模板语法**:`artTemplate` 使用`<% %>`作为模板的起始和结束标识...
例如,一个简单的原生语法模板可能如下所示: ```html <script id="template" type="text/html"> {{each users}} <li>{{name}} - {{age}} {{/each}} ``` **三、简洁语法** 简洁语法是为了方便开发,对...