zoukankan      html  css  js  c++  java
  • 使用模板引擎Trimpath 枫

    使用模板引擎,让开发模式更清晰,也让职责更明确,对维护对开发都是一件双赢的事情。

    曾经接触过SmartTemplate和Velocity,如果纯从编写前端模板来说,都不是太难的事情,大部分流行的模板引擎都支持类似的语法,如Smarty以及本文要介绍的JS模板引擎Trimpath。

    如果一个项目,需要前端大量的重绘数据来展现,大量的DOM树会随用户的操作而产生变化,这时,无论从功能上,还是性能上,以及维护的方便性 上,Trimpath template都是一个不错的选择。唯一遗憾的是,已经有近2年的时间没有更新了,是没有bug还是作者已经放弃掉了都不得而知。因为是好的东西,就不 管那么多了。

    Trimpath支持的语法:

    1)变量声明

    {var yihui = '一回'}
    ${yihui} // 一回


    2)变量(表达式)调节器

    Trimpath的变量调节器是可以扩展的,在使用上和Smarty几乎看不出区别:
    {var yihui = '<hr />'}
    ${yihui|escape|capitalize} // &LT;HR /&GT;

    Trimpath默认支持以下调节器:capitalize,escape(h),default,eat。同时支持表达式的调节,如:
    ${new Date()|toFormat:'YYYY-MM-DD'}
    你也可以根据自己的需要进行扩展,上面的toFormat就是自定义的。


    3)条件控制

    {var yihui = 'b'}
    {if yihui == 'a'}
          ${yihui}等于a
    {else}

    {elseif}
          ${yihui}不等于a
    {/if}


    4)循环控制

    假设数据为:
    var datas = [
       {'type' : 'market', 'name' : '市场基金', 'value' : 102.44},
    {'type' : 'channel', 'name' : '渠道基金', 'value' : 54},
    {'type' : 'customer', 'name' : '客服考核', 'value' : 98}
    ];

    模板可以这样写:
    <table width="400" cellspacing="0" cellpadding="0" border="1">
    {for x in datas}
         <tr>
          <td>${x.type}</td>
           <td>${x.name}</td>
           <td>${x.value}</td>
        </tr>
    {forelse}
       <tr>
           <td>没有数据</td>
        </tr>
    {/for}
    </table>
    这样书写,是不是要比字符串拼接更直观,维护也方便呢?


    5)支持宏定义

    宏可以理解为能够完成一定功能的函数,将通用的功能组织起来,有利于代码复用:
    {macro htmlList(list, optionalListType)}
        {var listType = optionalListType != null ? optionalListType : "ul"}
        <${listType}>
          {for item in list}
            <li>${item}</li>
          {/for}
        </${listType}>
    {/macro}

    ${htmlList([1,2,3], 'ol')}


    6)CDATA区域

    CDATA区域的内容将不被Trimpath解析,会原样输出
    {cdata}hello,${yihui}{/cdata}


    7)内联JS代码

    eval区域内可以直接书写JS代码:
    <select onchange="sel_onchange()">
        <option value="1">1</option>
        <option value="2">2</option>
    </select>
    {eval}
       sel_onchange = function() {
          alert('我不小心被change了');
       }
    {/eval}

  • 相关阅读:
    [环境]Java 环境变量
    [BZOJ 4008][HNOI2015]亚瑟王(期望Dp)
    [BZOJ 3295][Cqoi2011]动态逆序对(CDQ分治)
    [BZOJ 3668&UOJ #2][Noi2014]起床困难综合症(贪心)
    [BZOJ 4571][Scoi2016]美味(主席树)
    [BZOJ 4408][Fjoi 2016]神秘数(主席树+思路)
    [BZOJ 2212][Poi2011]Tree Rotations(线段树合并)
    [BZOJ 4592][Shoi2015]脑洞治疗仪(线段树)
    [BZOJ 2054]疯狂的馒头(并查集)
    [BZOJ 1455]罗马游戏(左偏树+并查集)
  • 原文地址:https://www.cnblogs.com/mrray/p/2301775.html
Copyright © 2011-2022 走看看