Scala JavaScript路由播放框架 [英] Scala JavaScript Routing Play Framework
问题描述
我在Scala中使用Play框架.我遇到一个奇怪的错误,无法解决该怎么办.错误消息是:
I'm using Play framework with Scala. I'm facing a weird error and can't figure out what's the solution. The error message is:
value Track不是对象controllers.routes.javascript
value Track is not a member of object controllers.routes.javascript
<script type="text/javascript" src="@routes.TrackController.javascriptRoutes"></script>
@helper.javascriptRouter("jsRoutes")(
routes.javascript.Track
)
def Track(id:Long)= Action {implicit request =>
Ok(views.html.track(
new TrackData(TrackClient.getTrack(id))))
}
def javascriptRoutes = Action { implicit request =>
Ok(
Routes.javascriptRouter("jsRoutes") (routes.javascript.TrackController.Track)).as("text/javascript")
}
#JavaScriptRouting
GET /track/:id @controllers.TrackController.Track(id: Long)
GET /javascriptRoutes @controllers.TrackController.javascriptRoutes
新错误为:
1@(message: String)
2
3@main("Welcome to Play 2.1") {
4
5 @play20.welcome(message)
6
7}
index.scala.html第3行.在此处找不到任何HTTP请求标头
index.scala.html at line 3. Cannot find any HTTP Request Header here
它显示index.scala,但我从未更改过.
It says index.scala but I have never changed it.
推荐答案
您的JavaScript路由定义为:
Your javascript route is defined as:
GET /javascriptRoutes controllers.TrackController.javascriptRoutes
编辑:在routes.javascript
下,播放对javascript使用了特殊的反向路由.
Edit: play uses a special reverse route for javascript, under routes.javascript
.
因此您的反向控制器将位于controllers.routes.javascript.TrackController.Track
:
so your reverse controller will be at controllers.routes.javascript.TrackController.Track
:
@helper.javascriptRouter("jsRoutes")(
routes.javascript.TrackController.Track
)
您还需要在模板中提供隐式RequestHeader
.因此,请在模板的开头添加:
You also need to make an implicit RequestHeader
available in your template. So add at the beginning of your template:
@(implicit request: RequestHeader)
或者如果您已经具有模板参数:
Or if you already have template parameters:
@(<your parameters>)(implicit request: RequestHeader)
并确保它在控制器的Action
中可用:
And make sure it is available in your controller's Action
:
def myController = Action { implicit request => // <-- request is a RequestHeader
// ...
Ok(views.html.myView)
}
如果从另一个视图(比如说index
)中调用了该视图(我们称它为main
),那么index
同样也需要一个隐式的RequestHeader
参数,以便能够将其向下传递到main
.
If that view (let's call it main
) is called from within another view (let's say index
), then index
also needs an implicit RequestHeader
parameter as well, to be able to pass it down to main
.
这篇关于Scala JavaScript路由播放框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!