1

我正在使用带有 Scala 的 Play 框架。我面临一个奇怪的错误,无法弄清楚解决方案是什么。错误信息是:

value Track 不是对象 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}

第 3 行的 index.scala.html。在此处找不到任何 HTTP 请求标头

它说 index.scala 但我从未更改过它。

4

2 回答 2

6

您的 javascript 路由定义为:

GET     /javascriptRoutes           controllers.TrackController.javascriptRoutes

编辑:play 使用 javascript 的特殊反向路由,在routes.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.

于 2013-06-05T14:43:58.770 回答
1

因为您的控制器名称是TrackController,所以尝试更改此代码:

@helper.javascriptRouter("jsRoutes")(
  routes.javascript.Track
)

有了这个:

@helper.javascriptRouter("jsRoutes")(
  routes.javascript.TrackController.Track
)
于 2013-06-06T13:14:27.920 回答