artTemplate 默认采用的是原生的 javascript 语法,类似微型模板引擎 tmpl。不同的是 artTemplate 的模板会采用沙箱机制限制全局对象的读写,这种机制很大程度上能够避免模板产生维护性的问题:若模板中若引用外部对象,随着项目复杂度增加,那时候谁都不能确定模板中的变量到底是数据还是全局对象,这种复杂的依赖关系将为会项目带来巨大的维护成本。在 artTemplage 的设计中,公用的方法与数据由 template.helper() 方法管理,既满足定义公用辅助方法的需求,也避免依赖外部对象产生维护问题。
众所周知 javascript 的语法非常自由,模板逻辑语句使用原生语法对于 javascript 开发人员来说几乎没有学习成本。但不可否认,模板的逻辑使用最多的也不过是条件表达式与循环表达式,而采用原生语法未免有大炮打蚊子的感觉,并且纯 javascript 语法对页面设计人员来说并不是那么容易掌握,因此设计一种简单易用的模板语法还是有必要的。
而 javascript 模板引擎语法无外乎三种类型:
1、崇尚强大与自由的原生语法派
<h3><%=title%></h3> <ul> <% for (i = 0, l = list.length; i < l; i ++) { %> <li>name: <%=list[i].user%>; url: <%=list[i].site%></li> <% } %> </ul>
2、崇尚干净利落的无逻辑派
<h3>{{title}}</h3> <ul> {{#list}} <li>name: {{user}}; url: {{site}}</li> {{/list}} </ul>
其中原生语法派以 tmpl 为代表,无逻辑派以 Mustache 为代表。原生语法派与无逻辑派各有优劣:tmpl 语法最为自由且强大,但弊端就是对设计人员不友好,阅读起来也比较吃力;而 Mustache 对设计人员非常友好,也非常利于模板迁移,但这种无逻辑语法弊端也十分明显,连最基本的数组索引值都没法输出。
3、求功能与易用平衡的中庸派
<h3>{{title}}</h3> <ul> {{#each list as val}} <li>name: {{val.user}}; url: {{val.site}}</li> {{/each}} </ul>
中庸派较好的在功能与易用性之前取得了平衡,而且这种类型的模板语法也经过了后端模板的工业级应用考验,相对来说比较成熟。artTemplate 的自定义语法扩展也采用此类型语法,上面的模板例子用 artTemplate 的写法:
<h3>{title}</h3> <ul> {each list} <li>name: {$value.user}; url: {$value.site}</li> {/each} </ul>
注:若没有特别说明,文章以下提到的 artTemplate 语法均指自定义语法。
安装扩展
只需要把 template-syntax.js 合并到 template.js 即完成自定义语法扩展安装。
表达式
"{" 与 "}" 符号包裹起来的语句则为模板的逻辑表达式。这两个界定符是可以自定义的,对应的配置属性接口是 template.openTag 与 template.closeTag。例如用 HTML 注释当作逻辑界定符:
template.openTag = '<!--{'; template.colseTag = '}-->';
输出表达式
对内容编码输出:
{content}
编码可以防止数据中含有 HTML 字符串,避免引起 XSS 攻击。
不编码输出:
{echo content}
条件表达式
{if admin} {content} {/if}
{if user
'admin'} {content} {else if user
'007'} <strong>hello world</strong> {/if}
遍历表达式
无论数组或者对象都可以用 each 进行遍历。
{each list} <li>{$index}. {$value.user}</li> {/each}
其中 list 为要遍历的数据名称, $value 与 $index 是系统变量, $value 表示数据单条内容, $index 表示索引值,这两个变量也可以自定义:
{each list as value index} <li>{index}. {value.user}</li> {/each}
模板包含表达式
用于嵌入子模板。
{include 'templateID' data}
其中 'templateID' 是外部模板的 ID, data 为传递给 'templateID' 模板的数据。 data 参数若省略,则默认传入当前模板的数据。
{include 'templateID'}
辅助方法
先使用 template.helper() 注册公用辅助方法,例如一个简单的 UBB 替换方法:
template.helper('$ubb2html', function (content) { return content .replace(/\[b\]([^\[]*?)\[\/b\]/igm, '<b>$1</b>') .replace(/\[i\]([^\[]*?)\[\/i\]/igm, '<i>$1</i>') .replace(/\[u\]([^\[]*?)\[\/u\]/igm, '<u>$1</u>') .replace(/\[url=([^\]]*)\]([^\[]*?)\[\/url\]/igm, '<a href="$1">$2</a>') .replace(/\[img\]([^\[]*?)\[\/img\]/igm, '<img src="$1" />'); });
模板中使用的方式:
{$ubb2html content}
若辅助方法有多个参数使用一个空格分隔即可:
{helperName args1 args2 args3}
artTemplate 主页:http://aui.github.com/artTemplate/
相关推荐
这个“artTemplate4.x自定义函数.zip”压缩包文件提供了关于如何在ArtTemplate4.x中定义和使用自定义函数的实例,这对于提升模板的可复用性和灵活性至关重要。 首先,我们来理解一下ArtTemplate4.x的基本工作原理。...
ArtTemplate的模板语法简洁而强大,主要包括以下元素: - **插值表达式**: `${expression}` 用于将数据对象中的属性值插入到HTML中。 - **条件语句**: `#if`, `#else`, `#elseif` 用于进行条件判断,根据数据动态...
3. **可扩展性**:artTemplate支持自定义插件,可以扩展其功能以满足特定需求。 4. **独立运行**:artTemplate不依赖任何其他库,可以单独使用,也可以与jQuery、React等框架配合。 5. **模板继承与部分**:art...
4. **简单API**: artTemplate 的API设计简洁,包括`template.compile`用于编译模板,`template.render`用于渲染数据,以及`template.helper`用于自定义辅助函数等。 5. **社区支持**: 虽然artTemplate相对较小,但...
可通扩展简洁的自定义语法 可定义公用函数 未定义的数据输出空值 示例模板: [removed] (i = 0; i ; i ) { %> 条目内容 <%= i 1 %> :[i] %> [removed] 标签:artTemplate
同时,有许多优秀的项目和插件基于ArtTemplate,如Sea.js的模块化支持,以及各种定制的模板语法扩展。 总的来说,ArtTemplate 是一个强大而灵活的模板引擎,它简化了前后端的数据交互,提高了开发效率,值得在实际...
**ArtTemplate** 是一个高性能的JavaScript模板引擎,它的主要优点包括简洁的语法、高效的速度和良好的兼容性。在本方案中,ArtTemplate用于渲染后台数据到前端页面,实现动态内容的展示。例如,可以创建一个模板...
Art Template的基本语法** - **插值表达式**:使用`{{ }}`包裹变量或表达式,例如`{{ name }}`。 - **条件语句**:如`{{#if condition}}...{{/if}}`,用于根据条件展示内容。 - **循环语句**:如`{{#each array}}.....
在本合集中,我们关注了几款流行的JavaScript模板引擎,包括doT、art-template、tpl、BaiduTemplate、kissyTemplate以及tmpl和juicer。下面我们将对这些模板引擎进行详细阐述。 1. doT.js doT.js是一款高效且简洁的...
3. **art-template**:ArtTemplate是一个轻量级的JavaScript模板引擎,用于在客户端渲染数据。它可以将数据和HTML结构分离,提高代码可维护性,避免了字符串拼接导致的性能问题。 4. **项目实战——美图网主页**:...
学习前端MVC引擎(如artTemplate)的使用,熟悉HUI和MUI(移动端自适应框架)的特性。掌握ValidForm和Layer库的使用。深入研究自定义Filter与ModelBinder的实现,学习ASP.Net MVC与Entity Framework的最佳实践。 - *...
`template`是HTML扩展语法,数据绑定使用Mustache(双括号),其优点在于学习成本低,拥有丰富的指令,但灵活性较低。相比之下,`jsx`是JavaScript语法的扩展,数据绑定使用单引号,它更灵活,更适合处理复杂的逻辑...
- 文件扩展名处理,分为用户方式和扩展名权限方式 - 上传结束提示:是否成功、失败原因 - 上传扩展名限制 解决apache .php.*当做php执行bug - 文件名非法字符限定 - 树目录展开箭头状态修复 - 树目录新建文件...