我正在使用Scala的Play框架。我面临一个奇怪的错误,无法弄清楚解决方案是什么。错误消息是:
value Track不是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但我从未改变过它。
答案 0 :(得分:6)
您的javascript路由定义为:
GET /javascriptRoutes controllers.TrackController.javascriptRoutes
编辑:play在routes.javascript
下使用javascript的特殊反向路由。
所以你的反向控制器将在controllers.routes.javascript.TrackController.Track
:
@helper.javascriptRouter("jsRoutes")(
routes.javascript.TrackController.Track
)
您还需要在模板中提供隐式RequestHeader
。所以在模板的开头添加:
@(implicit request: RequestHeader)
或者,如果您已有模板参数:
@(<your parameters>)(implicit request: RequestHeader)
并确保它在您的控制器的Action
:
def myController = Action { implicit request => // <-- request is a RequestHeader
// ...
Ok(views.html.myView)
}
如果从另一个视图中调用该视图(让我们称之为main
)(比如说index
),那么index
也需要隐式RequestHeader
参数,能够将其传递给main
。
答案 1 :(得分:1)
因为您的控制器名称是 TrackController ,所以请尝试更改此代码:
@helper.javascriptRouter("jsRoutes")(
routes.javascript.Track
)
用这个:
@helper.javascriptRouter("jsRoutes")(
routes.javascript.TrackController.Track
)