如何在多个 if 和 else 块中使用自由标记模板编写干净的代码?
How to write a clean code with free-marker template in multiple if and else blocks?
我是自由标记模板的新手,在我的模板中,我似乎必须重复很多 if 和 else 块,并重复相同的 if 条件。
如果块或而不是重复它们,是否有更方便或更简洁的方式来编写此代码。
<span > </span>
<#elseif section.role?has_content && section.person?has_content && section.organisation??>
<span > </span>
<#elseif section.role?has_content && section.organisation?has_content && section.person??>
<span > </span>
<#elseif section.person?has_content && section.organisation?has_content && section.role??>
<span > </span>
<#elseif section.person?has_content && section.role?? && section.organisation??>
<span > </span>
<#elseif section.organisation?has_content && section.role?? && section.person??>
<span > </span>
<#elseif section.role?has_content && section.organisation?? && section.person??>
<span > </span>
</#if>
我认为你可以在 freemaker 中做这样的事情,这样比重复条件更干净。
无需多次重复此 section.role?has_content
,您可以在变量中分配此条件值并在以后像这样使用它 <#assign hasRole = section.role?has_content />
<#assign hasRole = section.role?has_content />
<#assign hasOrganisation = section.organisation?has_content />
<span >
<#if section.person?has_content><span ></span><#if section.role?has_content><span ></span></#if></#if>
<#if section.role?has_content><span ></span><#if section.organisation?has_content><span ></span></#if></#if>
<#if section.organisation?has_content>
<span ></span>
</#if>
</span>```
您可以在一个 if 语句中检查所有内容:
<#if section.person?? && section.role?? && section.organisation?? &&
(section.person?has_content || section.organisation?has_content || section.role?has_content)>
<span ></span>
</#if>
实际上,您可以使用 <#switch> 标签来处理经典编程语言中的多种情况。这是来自 freemarker.apache.org 的示例:
<#switch animal.size>
<#case "small">
This will be processed if it is small
<#break>
<#case "medium">
This will be processed if it is medium
<#break>
<#case "large">
This will be processed if it is large
<#break>
<#default>
This will be processed if it is neither
</#switch>
在您的示例中,正如我所见,您可以准确地将语句包装在多个 switch-cases 中,并使用 Adam 建议的变量
我是自由标记模板的新手,在我的模板中,我似乎必须重复很多 if 和 else 块,并重复相同的 if 条件。 如果块或而不是重复它们,是否有更方便或更简洁的方式来编写此代码。
<span > </span>
<#elseif section.role?has_content && section.person?has_content && section.organisation??>
<span > </span>
<#elseif section.role?has_content && section.organisation?has_content && section.person??>
<span > </span>
<#elseif section.person?has_content && section.organisation?has_content && section.role??>
<span > </span>
<#elseif section.person?has_content && section.role?? && section.organisation??>
<span > </span>
<#elseif section.organisation?has_content && section.role?? && section.person??>
<span > </span>
<#elseif section.role?has_content && section.organisation?? && section.person??>
<span > </span>
</#if>
我认为你可以在 freemaker 中做这样的事情,这样比重复条件更干净。
无需多次重复此
section.role?has_content
,您可以在变量中分配此条件值并在以后像这样使用它<#assign hasRole = section.role?has_content />
<#assign hasRole = section.role?has_content />
<#assign hasOrganisation = section.organisation?has_content />
<span >
<#if section.person?has_content><span ></span><#if section.role?has_content><span ></span></#if></#if>
<#if section.role?has_content><span ></span><#if section.organisation?has_content><span ></span></#if></#if>
<#if section.organisation?has_content>
<span ></span>
</#if>
</span>```
您可以在一个 if 语句中检查所有内容:
<#if section.person?? && section.role?? && section.organisation?? &&
(section.person?has_content || section.organisation?has_content || section.role?has_content)>
<span ></span>
</#if>
实际上,您可以使用 <#switch> 标签来处理经典编程语言中的多种情况。这是来自 freemarker.apache.org 的示例:
<#switch animal.size>
<#case "small">
This will be processed if it is small
<#break>
<#case "medium">
This will be processed if it is medium
<#break>
<#case "large">
This will be processed if it is large
<#break>
<#default>
This will be processed if it is neither
</#switch>
在您的示例中,正如我所见,您可以准确地将语句包装在多个 switch-cases 中,并使用 Adam 建议的变量