[html] Play2 스칼라 템플릿에서 변수 선언하기


2 Answers

사실, @ 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 다시 덮어 쓰려고 할 때만 관련이 있습니다.

Question

Play2 Scala 템플릿에서 로컬 변수를 선언하고 초기화하는 방법은 무엇입니까?

나는 이것을 가지고있다:

@var title : String = "Home"

템플릿의 맨 위에 선언했지만이 오류가 발생합니다.

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



꽤 깨끗해 보이고 때로는 선호되는 확실한 해결책이 있습니다. 템플릿 주위에 범위를 정의하고 그 안에 변수를 정의한 다음 범위에서 필요한 html 코드를 생성하도록합니다.

@{
  val title = "Home"

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

여기에는 몇 가지 단점이 있습니다.

  • Scala NodeSeq 로 html을 생성 할 때 가끔 제한적일 수 있습니다.
  • 이 솔루션에 대한 성능 문제가 있습니다. @{ 내부의 코드는 컴파일 된 런타임 인 ​​것으로 보이는데, 페이지 용으로 생성 된 스칼라 코드가 이와 같이 loooks (일부 일반적인 Twirl 요소가 삭제됨) 되었기 때문입니다.

생성 된 코드 :

...    

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>"""))
      }
    }
  }

...



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..."));
}



Related