artTemplate 自定义语法扩展
by admin
at 2012-07-15 21:39:47
original http://www.planeart.cn/?p=1839
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></h3>
<ul>
<li>name: ; url: {"related_posts"=>[, , , , , , , , , ], "source"=>"/Users/weiwei/code/github/reader", "destination"=>"/Users/weiwei/code/github/reader/_site", "plugins"=>"_plugins", "layouts"=>"_layouts", "keep_files"=>[".git", ".svn"], "timezone"=>nil, "safe"=>false, "detach"=>false, "show_drafts"=>nil, "limit_posts"=>0, "lsi"=>false, "future"=>true, "pygments"=>true, "relative_permalinks"=>true, "markdown"=>"rdiscount", "permalink"=>"date", "baseurl"=>"/google_reader", "include"=>[".htaccess"], "exclude"=>[], "paginate_path"=>"/page:num", "markdown_ext"=>"markdown,mkd,mkdn,md", "textile_ext"=>"textile", "port"=>"4000", "host"=>"0.0.0.0", "excerpt_separator"=>"\n\n", "maruku"=>{"use_tex"=>false, "use_divs"=>false, "png_engine"=>"blahtex", "png_dir"=>"images/latex", "png_url"=>"/images/latex"}, "rdiscount"=>{"extensions"=>[]}, "redcarpet"=>{"extensions"=>[]}, "kramdown"=>{"auto_ids"=>true, "footnote_nr"=>1, "entity_output"=>"as_char", "toc_levels"=>"1..6", "smart_quotes"=>"lsquo,rsquo,ldquo,rdquo", "use_coderay"=>false, "coderay"=>{"coderay_wrap"=>"div", "coderay_line_numbers"=>"inline", "coderay_line_number_start"=>1, "coderay_tab_width"=>4, "coderay_bold_every"=>10, "coderay_css"=>"style"}}, "redcloth"=>{"hard_breaks"=>true}, "name"=>"Google Reader", "time"=>2013-09-23 17:16:46 +0800, "posts"=>[, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,