声明变量在Play2模板阶(Declare variable in a Play2 scala te

2019-06-17 18:49发布

你如何声明和初始化要在Play2 Scala的模板在本地使用的变量?

我有这个:

@var title : String = "Home"

在模板的顶部声明,但它给了我这个错误:

illegal start of simple expression """),_display_(Seq[Any](/*3.2*/var)),format.raw/*3.5*/(""" title : String = "Home"

Answer 1:

@defining("foo") { title=>
  <div>@title</div>
  ...
}

基本上,你必须包装在其中你要使用它的块



Answer 2:

其实,@ C4K的解决方案是工作(和相当方便),只要你不尝试事后改变变量的值,是不是?

你只要把这个在您的模板的顶部:

@yourVariable = {yourValue}

或者,如果它是一个更复杂的表情,你这样做:

@yourVariable = @{yourExpression}

你甚至可以像东西一样,列出工作:

@(listFromController: List[MyObject])
@filteredList = @{listFromController.filter(_.color == "red")}

@for(myObject <- filteredList){ ... }

对于给定的例子,这将是

@title = {Home}  //this should be at beginning of the template, right after passing in parameters

<h1> Using title @title </h1>

在评论你说的,那它就会被输入到HTML类型。 但是,如果你试图覆盖,这只是相关@title再次,不是吗?



Answer 3:

Scala的模板支持这一点,你可以在模板中定义变量

@import java.math.BigInteger; var i=1; var k=1

如果你想改变它的模板值

@{k=2}

@(title:String)(implicit session:play.api.mvc.Session)
@import java.math.BigInteger; var i=1; var k=1
^
<div id='LContent_div@i'>
                     ^
  <div id='inner_div_@k'></div>
                     ^
</div>


Answer 4:

virtualeyes'解决方案是正确的,但也有另一种可能性,你可以声明一个视图的PARAM因为通常默认值,在这种情况下,你会拥有它适用于整个模板+你保住可能性对其进行更改该controller

@(title: String = "Home page")

<h1>Welcome on @title</h1>

控制器:

def index = Action{
    Ok(views.html.index("Other title"))
}

需要注意的是Java的控制器不承认模板的默认值,所以你需要他们每次添加:

public static Result index(){
    return ok(views.html.index.render("Some default value..."));
}


Answer 5:

如果你不想换用@defining所有内容,你可以这样做:

@yourVariable = { yourValue }

该@defining指令是在模板中真正不可读...



Answer 6:

有一个看似很干净,可有时是优选的一个显而易见的解决方案:定义范围周围的模板,定义它里面的变量,让范围生产您需要的HTML代码,如下所示:

@{
  val title = "Home"

  <h1>Welcome on {title}</h1>
}

这有一些缺点:

  • 您正在生成的HTML作为斯卡拉NodeSeq这种方式,有时可能会限制
  • 有该解决方案的性能问题:里面的代码@{似乎编译运行,因为该页面loooks这样的(一些常用的旋转扭曲的东西删除)生成的Scala代码:

生成的代码:

...    

Seq[Any](format.raw/*1.1*/("""<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Basic Twirl</title>
    </head>
    <body>

        """),_display_(/*9.10*/{
            val title = "Home"

                <h1>Welcome on {title}</h1>
        }),format.raw/*15.10*/("""

    """),format.raw/*17.5*/("""</body>
</html>"""))
      }
    }
  }

...


Answer 7:

在捻模板我会建议使用的定义块,这是因为

@random = @{
     new Random().nextInt
}

<div id="@random"></div>
<div id="@random"></div>

多次使用时会导致不同的值!

@defining(new Random().nextInt){ random =>
    <div id="@random"></div>
    <div id="@random"></div>
}


Answer 8:

@isExcel= {@Boolean.valueOf(java.lang.System.getProperty(SettingsProperties.isExcel))}


文章来源: Declare variable in a Play2 scala template