Scala JavaScript路由播放框架

时间:2013-06-05 13:32:57

标签: scala playframework

我正在使用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但我从未改变过它。

2 个答案:

答案 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
)
相关问题