CommonTemplate0.8.0发布

在元旦之夜发布了0.8.0
[url]http://www.commontemplate.org[/url]

增加了与struts及struts2的集成sample, (见下载列表中的commomtemplate-sample-0.8.0.zip)


将宏指令的特殊前缀语法去掉, 改成命名约定:

受FreeMarker影响, 它使用仿XML的:

<@mymacro/>
<@mymacro>...</@mymacro>

使自定义宏可以用行指令及块指令两种方式调用,
当以块指令调用时, 可以用<#nest>回调内部块,
(注:<#include>等内置行指令不需要/>结尾)

基于同样的思路, CommonTemplate采用了:

$-mymacro{xxx}
$+mymacro{xxx}...$end

减号前缀表示行指令调用, 加号前缀表示块指令调用,相当于引入了特殊语法.

这是因为指令的解析在编译期就要决定是行指令还是块指令,
而宏的定义在运行期才能获取. 所以需要标识告诉引擎怎么解析.

然而, 思索良久发现, 一个宏要不就是行指令, 要不就是块指令,
很少把一个行指令用块指令调用,或把一个块指令用行指令调用,
如:

$macro{"mybutton"}
<input type="button" value="${name}" />
$end

这个宏肯定会用行指令调用,而

$macro{"mytable"}
<table>
$inner (注:相当于freemarker的nested)
</table>
$end

这个宏肯定会以块指令调用, 因为它用了inner回调,
也就是说,是行指令,还是块指令,应该在宏定义时就已经决定了,而不是在调用时决定,

所以决定采用命名规则判断是否为块指令(规则可配置)
默认规则为:
以"_block"结尾的宏指令为块指令,如:

$macro{"mytable_block"}
<table>
$inner
</table>
$end


调用方式与普通指令一模一样, 也就是无特殊语法:
块指令调用:

$mytable_block
<tr><td></td></tr>
$end

行指令调用:

$mybutton{name: "Query"}


这样,是行指令,还是块指令,在定义时就决定了,也便于理解,
而引擎可以通过匹配命名规则来解析指令树.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值