2015-08-16 4 views
2

Я создаю специальный тег для обертывания глификонов.Удостоверяясь, что пользовательский тэг не имеет subtags

<b:icon binding="i" /> 

Часть Glyphicon спецификация включает в себя:

Только для использования на пустых элементах

классы Icon должны использоваться только на элементах, которые не содержат никакого содержания текста и не имеют дочерних элементов.

Я хочу, чтобы убедиться, что никто не делает что-то вроде

<b:icon binding="i"> 
    <cfset myVariable++> 
</b:icon> 

Есть ли способ, чтобы убедиться, что пользовательский тег не имеет внутренние теги?

ответ

3

У вас есть два варианта, которые я могу видеть.

Сначала отбросьте исключение, если thisTag.executionMode есть что-то кроме "start". Или можно было бы исключить исключение, если thisTag.hasEndTag - true. Однако это будет ограничить использование тегов для:

<b:icon binding="i"> 

И не:

<b:icon binding="i" /> 

Поскольку /> является сокращением для конечного тега. Это меньше идеала, и вы, возможно, не согласитесь на это как на подход.

Во-вторых, вы можете проверить, есть ли какие-либо generatedContent, но это большой случайны, потому что это вполне возможно, что-то между стартовыми и закрывающим тегами, но осторожность не создавать контент:

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

(примечание: даже новые строки и отступы будут считаться generatedContent, если таковые имеются).

Итог: в то время как пользовательские теги JSP позволяют контролировать такие вещи, я не вижу, как это можно контролировать с помощью реализации CFML. Самое близкое, что вы можете сделать, это полностью запретить закрытие тегов.

Смежные вопросы