如何在多个 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 建议的变量