`
CshBBrain
  • 浏览: 650227 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:144928
Group-logo
HTML5移动开发
浏览量:137878
社区版块
存档分类
最新评论

artTemplate 自定义语法扩展

 
阅读更多

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自定义函数.zip”压缩包文件提供了关于如何在ArtTemplate4.x中定义和使用自定义函数的实例,这对于提升模板的可复用性和灵活性至关重要。 首先,我们来理解一下ArtTemplate4.x的基本工作原理。...

    artTemplate模板引擎

    ArtTemplate的模板语法简洁而强大,主要包括以下元素: - **插值表达式**: `${expression}` 用于将数据对象中的属性值插入到HTML中。 - **条件语句**: `#if`, `#else`, `#elseif` 用于进行条件判断,根据数据动态...

    模板化工具 -arttemplate

    3. **可扩展性**:artTemplate支持自定义插件,可以扩展其功能以满足特定需求。 4. **独立运行**:artTemplate不依赖任何其他库,可以单独使用,也可以与jQuery、React等框架配合。 5. **模板继承与部分**:art...

    artTemplate

    4. **简单API**: artTemplate 的API设计简洁,包括`template.compile`用于编译模板,`template.render`用于渲染数据,以及`template.helper`用于自定义辅助函数等。 5. **社区支持**: 虽然artTemplate相对较小,但...

    javascript模板引擎artTemplate.zip

    可通扩展简洁的自定义语法 可定义公用函数 未定义的数据输出空值 示例模板: [removed] (i = 0; i ; i ) { %&gt; 条目内容 &lt;%= i 1 %&gt; :[i] %&gt; [removed] 标签:artTemplate

    模板化工具arttemplate

    同时,有许多优秀的项目和插件基于ArtTemplate,如Sea.js的模块化支持,以及各种定制的模板语法扩展。 总的来说,ArtTemplate 是一个强大而灵活的模板引擎,它简化了前后端的数据交互,提高了开发效率,值得在实际...

    利用arttemplate和轻量路由配合webpack多页打包定制运营活动项目构建方案

    **ArtTemplate** 是一个高性能的JavaScript模板引擎,它的主要优点包括简洁的语法、高效的速度和良好的兼容性。在本方案中,ArtTemplate用于渲染后台数据到前端页面,实现动态内容的展示。例如,可以创建一个模板...

    art-template-docs:艺术模板文件

    Art Template的基本语法** - **插值表达式**:使用`{{ }}`包裹变量或表达式,例如`{{ name }}`。 - **条件语句**:如`{{#if condition}}...{{/if}}`,用于根据条件展示内容。 - **循环语句**:如`{{#each array}}.....

    几款前端模板引擎合集.zip

    在本合集中,我们关注了几款流行的JavaScript模板引擎,包括doT、art-template、tpl、BaiduTemplate、kissyTemplate以及tmpl和juicer。下面我们将对这些模板引擎进行详细阐述。 1. doT.js doT.js是一款高效且简洁的...

    前端代码备份.zip

    3. **art-template**:ArtTemplate是一个轻量级的JavaScript模板引擎,用于在客户端渲染数据。它可以将数据和HTML结构分离,提高代码可维护性,避免了字符串拼接导致的性能问题。 4. **项目实战——美图网主页**:...

    .NET技术学习大纲

    学习前端MVC引擎(如artTemplate)的使用,熟悉HUI和MUI(移动端自适应框架)的特性。掌握ValidForm和Layer库的使用。深入研究自定义Filter与ModelBinder的实现,学习ASP.Net MVC与Entity Framework的最佳实践。 - *...

    part01~开发通用前端UI框架

    `template`是HTML扩展语法,数据绑定使用Mustache(双括号),其优点在于学习成本低,拥有丰富的指令,但灵活性较低。相比之下,`jsx`是JavaScript语法的扩展,数据绑定使用单引号,它更灵活,更适合处理复杂的逻辑...

    KODExplorer 芒果云-资源管理器

    - 文件扩展名处理,分为用户方式和扩展名权限方式 - 上传结束提示:是否成功、失败原因 - 上传扩展名限制 解决apache .php.*当做php执行bug - 文件名非法字符限定 - 树目录展开箭头状态修复 - 树目录新建文件...

Global site tag (gtag.js) - Google Analytics