지나치게 재사용 될 수 있기 때문에 일부 도우미 함수를 다른 파일에 배치하려고합니다. https://github.com/playframework/Play20/blob/master/samples/scala/computer-database/app/views/list.scala.htmlPlayFramework 2.0 - 다른 템플릿의 함수를 호출 할 수 없습니다.
내가 응용 프로그램/뷰 패키지에서 "listing.scala.html"라는 새로운 파일을 생성하고 원본 파일에서 @ 링크 기능을 이동 : 나는 컴퓨터, 데이타베이스 샘플의 목록 파일을했다 그것에. 이 하나,
@(currentSortBy: String, currentOrder: String, currentFilter: String)
@****************************************
* Helper generating navigation links *
****************************************@
@link(newPage:Int, newSortBy:String) = @{
var sortBy = currentSortBy
var order = currentOrder
if(newSortBy != null) {
sortBy = newSortBy
if(currentSortBy == newSortBy) {
if(currentOrder == "asc") {
order = "desc"
} else {
order = "asc"
}
} else {
order = "asc"
}
}
// Generate the link
routes.Application.listPerfil(newPage, sortBy, order, currentFilter)
}
그래서, 내 원본 파일에, 나는 @link 호출을 대체 :이 새 파일은 다음과 같습니다
<a href="@listing(currentSortBy, currentOrder, currentFilter).link(0, key)">@title</a>
그리고 내가 컴파일하려고 할 때 문제는, 이 오류를 얻을 :
이value link is not a member of play.api.templates.Html
그러나 설명서에 따라 (http://www.playframework.org/documentation/2.0.4/ScalaTemplateUseCases이)가 확인 될 것으로 보인다.
아무리 생각해도 되겠습니까?
네, 요점을 봅니다. 이것은 뷰 관련 함수이므로 컨트롤러를 사용하지 않아 컨트롤러에 없어야합니다. 그리고이 문서는이 사용법을 장려합니다. 불행히도 그것은 작동하지 않습니다. 나는 link라고하는 하나의 HTML 파일을 만들어서 마지막 기회를 줄 것이라고 생각한다. 작동한다면 코드 중복을 피하기 위해 몇 가지 단일 기능 파일을 사용하여 전자 메일을 위험에 빠뜨릴 수 있습니다. –
확실히 블록을 형성하는 것은 템플릿을위한 작업이지만 올바른 경로를 만드는 것은 로직의 일부로 간주 될 수 있습니다. 한번보세요 : 당신의 view에서 non-view 함수 인'routes.Application.listPerfil (newPage, sortBy, order, currentFilter)'를 사용하고 있습니다, 그래서 나는 당신 자신의 'wrapping'과 관련하여 잘못된 것을 보지 않습니다. 함수/메소드. 당연히 그것은 당신의 선택입니다, 당신은 초 단위로 제어기로 또는 템플릿 시스템으로 여전히 '싸워'할 수 있습니다 :) – biesior
좋아, 나는 그걸 포기했다. 단일 기능보기 파일로 작동하도록 만들었지 만 링크 생성을 매개 변수화해야한다는 것을 깨달았습니다. 코드 가독성이 손상 될 수 있습니다. 따라서 코드 중복을 남겨두고 코드 위에 독수리 눈을 피하십시오. :) –