Scala JavaScript路由播放框架 [英] Scala JavaScript Routing Play Framework

查看:79
本文介绍了Scala JavaScript路由播放框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆