posts - 176, comments - 240, trackbacks - 0, articles - 7

tpl标签结构

Posted on 2005-11-22 23:09 canonical 阅读(1011) 评论(0)  编辑  收藏 所属分类: Witrix开发平台
    witrix平台中的tpl模板技术的重点在于标签定义的设计, 在于如何最大限度的发挥xml格式的表达能力。
    tpl自定义标签的基本结构如下:
    <Namespace:TagName tpl:tag="realTagName"
        tpl:noborder="${booleanExprInCompileContext}"
        tpl:ignore="${booleanExprInCompileContext}"
        attrName="stringOrExpression" cp:attributeInCompileContext="atringOrExpression"
        OtherNamespace:OtherAttrName="stringOrExpression"
        >
        bodyContent
    </NameSpace:TagName>
    自定义标签总是处在某一名字空间中, tpl名字空间中的属性由tpl编译器负责进行解析并处理, 而cp名字空间中的属性在编译期能够访问,其他名字空间的属性被完全忽略, 一般只有decorator会识别这些属性(例如cache:timeout).所有无名字空间的属性都相当于是自定义标签的调用参数,在标签运行的时候 可以在标签内部访问到。
    tpl通过对namespace的使用, 避免了系统属性, decorator属性与普通标签属性之间的相互干扰, 这与JSF和Tapestry都是不同的。
    tpl:tag属性指定此标签在编译时对应的真实标签名, 即编译期会识别RealTagName而不是Namespace:TagName。tpl:noborder为true的时候相当于是直接编译 bodyContent, 例如用来在编译期控制是否在界面上使用某种边框。
    tpl:ignore为true的时候,此标签将被忽略而不会被编译。
    bodyContent在编译期成为tagBody变量, 由自定义标签自己决定如何处理, 这种方式比FreeMarker的<#nested>机制要灵活和强大的多. 例如在标签内部我们可以使用<cp:compile src="${tagBody}" /> 这等价于 FreeMarker的<#nested>. 也可以使用
    <cp:compile src="${tagBody.existingChild('header')}" />从bodyContent中取出header子节点. 甚至我们可以对tagBody进行加工之后再进行编译.

只有注册用户登录后才能发表评论。


网站导航: