2017-08-16 1 views
1

La raison principale de ceci pour moi est de pouvoir imprimer mon code freemarker par des éditeurs html (comme un plugin dans notepad ++). Quand j'utilise juste < #else>, l'indentation est fausse. Quand j'utilise < #else />, ça va. Cela a semblé marcher jusqu'à présent, mais je ne suis pas sûr de ne pas faire quelque chose d'horriblement mauvais.Est-il acceptable d'utiliser des balises paires à la place des balises non-paires dans freemarker? Comme dans <#else /> au lieu de seulement <#else>?

Répondre

1

<#... /> est pris en charge pour la plupart des directives de base, y compris #else. (Ceux qui ne sont pas pris en charge sont ceux que vous n'êtes pas censés utiliser sans contenu imbriqué de toute façon, comme #list et #if.) Cependant, autoriser <#else /> et <#elseif ... /> est en fait un bogue hérité. Ils fonctionnent de la même façon que sans /, et ce bug ne sera pas corrigé dans FreeMarker 2.x pour des raisons de compatibilité ascendante, donc il n'y a pas de quoi s'inquiéter. Mais ils sont en principe incorrects comme #else et #elseif a leur contenu imbriqué (propre bloc) sous eux, donc ils ne sont pas fermés juste après le tag. Au lieu de cela, ils sont implicitement fermés par le suivant <#else ...>/<#elseif ...> ou </#if>. Donc <#else /> est toléré mais ce n'est pas un style sympa. En ce qui concerne l'indentation dans les éditeurs, l'éditeur doit savoir si les directives prennent en charge le contenu imbriqué. Comme si le nom de la directive est "include", alors il sait qu'aucune indentation n'est nécessaire après cette balise. #assign/#local/#global est quelque peu difficile, car ils ont deux formes: <#assign x = ...> et <#assign x>...</#assign>. En outre, il existe parfois un problème lié à l'ajout de nouvelles directives, de sorte que l'éditeur ne les reconnaît pas encore. Heureusement, cela arrive rarement, ce n'est donc pas une situation impossible.