Play2 스칼라 템플릿에서 변수 선언
Play2 Scala 템플릿에서 로컬로 사용할 변수를 어떻게 선언하고 초기화합니까?
나는 이것을 가지고있다:
@var title : String = "Home"
템플릿 상단에 선언되었지만 다음과 같은 오류가 발생합니다.
illegal start of simple expression """),_display_(Seq[Any](/*3.2*/var)),format.raw/*3.5*/(""" title : String = "Home"
@defining("foo") { title=>
<div>@title</div>
...
}
기본적으로 사용하려는 블록을 감싸 야합니다.
실제로 @ 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
그것은 다시 덮어 쓰려고 할 때만 관련 이 있지 않습니까?
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>
virtualeyes의 솔루션이 적절한 솔루션이지만 다른 가능성도 있습니다. 일반적으로 기본값으로 뷰의 매개 변수를 선언 할 수 있습니다.이 경우 전체 템플릿에 사용할 수 있습니다. 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..."));
}
@defining으로 모든 콘텐츠를 래핑하지 않으려면 다음을 수행 할 수 있습니다.
@yourVariable = { yourValue }
@defining 지시문은 템플릿에서 실제로 읽을 수 없습니다.
매우 깔끔해 보이고 가끔 선호되는 확실한 솔루션이 있습니다. 템플릿 주위에 범위를 정의하고 그 안에 변수를 정의한 다음 범위가 다음과 같이 필요한 html 코드를 생성하도록합니다.
@{
val title = "Home"
<h1>Welcome on {title}</h1>
}
여기에는 몇 가지 단점이 있습니다.
- you are generating your html as Scala
NodeSeq
this way, which may be limiting sometimes - there is a performance issue with this solution: the code inside of
@{
seems to be compiled runtime, because the Scala code generated for the page loooks like this (some usual Twirl stuff deleted):
The generated code:
...
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>"""))
}
}
}
...
In twirl templates I would recommend using the defining block, because the
@random = @{
new Random().nextInt
}
<div id="@random"></div>
<div id="@random"></div>
would result in different values when used multiple times!
@defining(new Random().nextInt){ random =>
<div id="@random"></div>
<div id="@random"></div>
}
@isExcel= {@Boolean.valueOf(java.lang.System.getProperty(SettingsProperties.isExcel))}
ReferenceURL : https://stackoverflow.com/questions/12031146/declare-variable-in-a-play2-scala-template
'programing' 카테고리의 다른 글
"aX4j9Z"와 같은 짧은 uid를 생성하는 방법 (JS) (0) | 2020.12.29 |
---|---|
Google OAuth2 사용자를 식별하는 방법은 무엇입니까? (0) | 2020.12.29 |
번들 설치가 공급 업체 / 번들에 gem을 설치하는 이유는 무엇입니까? (0) | 2020.12.29 |
정적이 문맥에 따라 다른 의미를 갖는 이유는 무엇입니까? (0) | 2020.12.29 |
Angular 2 Material Design Components에서 Layout Directive를 지원합니까? (0) | 2020.12.29 |