玩循环的框架模板

时间:2013-12-24 12:29:36

标签: scala templates playframework

我正在尝试在模板中的for循环中打印一些html元素。

模板:

    <ul>
     @for(index <- 0 until appointments.size){
    <li>
        @(utils.DateUtil.getDate(appointments(index).getStartDate())) - @appointments(index).getReason()
        <ul>

            @{val procedure = appointments(index).getProcedures()

                if(procedure.size() == 0)
                {
                    <b>žádna procedura nebyla vykonána</b>
                }
                else 
                {
                    <b>test</b>

                    for(proc <- procedure)
                    {
                    <b>for test</b>
                    }
                }

            }


        </ul>

    </li>
    }

</ul>

问题在于else分支。

如果我删除此代码:

 for(proc <- procedure)
 {
  <b>for test</b>
 }

打印出测试

但如果我留下它,那么else分支就不会打印出来

我尝试将代码封装在花括号中,不同的循环符号 - &gt; for(index2 <- 0 until procedure.size)但没有任何效果。

2 个答案:

答案 0 :(得分:2)

请记住,这是一个模板引擎,虽然它是基于Scala的,有些东西是行不通的 - 即。变量声明(根据定义,它是控制器的工作)。 Play可替代(如果确实需要):

@defining(appointments(index).getProcedures()) { procedure => 
   <b>Common HTML using defined @procedure</b>
}

无论如何,如果我没错,那么用Play模板编写的代码应该如下所示。

@(appointments: List[Appointment])

<ul>
    @for(appointment <- appointments) {
        <li>
            @(utils.DateUtil.getDate(appointment.getStartDate())) - @appointment.getReason()
            @if(appointment.getProcedures() != null && appointment.getProcedures().size()>0) {
                <ul>
                    @for(procedure <- appointment.getProcedures()){
                         <li>@Messages("procedure.execuded") @procedure.name</li>
                    }
                </ul>
            } else {
                <b>@Messages("no.execuded.procedures")</b>
            }
        </li>
    }
</ul>

注意:从手指写入,它可能包含错误

答案 1 :(得分:0)

@ for(proc&lt; - procedure)  {   进行测试  }

在视图中定义变量也被认为是一种不好的做法。正确的方法是从操作中传递所有集合/数据类,并在视图中迭代它们。