问题
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 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
The new error is :
1@(message: String)
2
3@main("Welcome to Play 2.1") {
4
5 @play20.welcome(message)
6
7}
index.scala.html at line 3. Cannot find any HTTP Request Header here
It says index.scala but I have never changed it.
回答1:
Your javascript route is defined as:
GET /javascriptRoutes controllers.TrackController.javascriptRoutes
Edit: play uses a special reverse route for javascript, under routes.javascript
.
so your reverse controller will be at controllers.routes.javascript.TrackController.Track
:
@helper.javascriptRouter("jsRoutes")(
routes.javascript.TrackController.Track
)
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)
And make sure it is available in your controller's Action
:
def myController = Action { implicit request => // <-- request is a RequestHeader
// ...
Ok(views.html.myView)
}
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
.
回答2:
Because your controller's name is TrackController, so try to change this code:
@helper.javascriptRouter("jsRoutes")(
routes.javascript.Track
)
with this:
@helper.javascriptRouter("jsRoutes")(
routes.javascript.TrackController.Track
)
来源:https://stackoverflow.com/questions/16941341/scala-javascript-routing-play-framework