确保自定义标记没有子标记

时间:2015-08-16 21:05:03

标签: coldfusion coldfusion-11 custom-tag

我正在构建自定义标记以包裹glyphicons。

 <b:icon binding="i" />  

Glyphicon规范的一部分包括:

仅用于空元素

  

图标类只应用于不包含文本的元素   内容并没有子元素。

我想确保没有人做像

这样的事情
 <b:icon binding="i">
    <cfset myVariable++>
 </b:icon>  

有没有办法确保自定义标记没有任何内部标记?

1 个答案:

答案 0 :(得分:3)

嗯,你有两种我可以看到的选择。

首先,如果thisTag.executionMode不是"start",则抛出异常。或者,如果thisTag.hasEndTagtrue,则同样可以抛出异常。但是,这会将标记使用限制为:

<b:icon binding="i">

<b:icon binding="i" />

因为/>是结束标记的简写。这不太理想,你也许不会接受这种方法。

其次你可以检查是否有generatedContent,但这是一个很大的杂乱无章,因为完全有可能在开始和结束标签之间有一些东西,但是小心不要生成内容:

<b:icon binding="i"><cfset foo="bar"></b:icon>

(注意:如果有的话,即使是新的行和缩进也算作generatedContent

底线:虽然JSP自定义标签允许控制此类事物,但我无法看到CFML实现如何控制它。最接近的是禁止完全关闭标签。