如何在多个if和else块中使用自由标记模板编写干净的代码?

时间:2019-06-10 10:23:42

标签: freemarker

我是自由标记模板的新手,在我的模板中,看来我可能不得不重复很多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>

3 个答案:

答案 0 :(得分:1)

  • 我认为您可以在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>```

答案 1 :(得分:0)

您可以在一个if语句中检查所有内容:

<#if section.person?? && section.role?? && section.organisation?? &&
(section.person?has_content || section.organisation?has_content || section.role?has_content)>
 <span ></span>
</#if>

答案 2 :(得分:0)

实际上,您可以使用<#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>

在您的示例中,正如我所看到的,您可以将语句准确地包装在多个切换案例中,并使用亚当建议的变量