sol*_*oth 10 scala playframework-2.0
目前我以相当冗长的方式定义我的应用程序的javascript路由器
def javascriptRoutes = Action { implicit request =>
import routes.javascript._
Ok(Routes.javascriptRouter("jsRoutes")(
Login.method1,Login.Method2,
OtherController.method1,OtherController.method2,
//[...]
)).as("text/javascript")
}
Run Code Online (Sandbox Code Playgroud)
我真正想做的是创建一个javascriptRouter包含文件中所有路由的routes文件,因此javascriptRoutes每次添加新的控制器方法时都不必手动更新定义.
有没有办法完成这项任务,或者是否有一种稍微简单的定义方式javascriptRouter?
tha*_*ing 16
您可以通过反射这样做:
val routeCache = {
import routes._
val jsRoutesClass = classOf[routes.javascript]
val controllers = jsRoutesClass.getFields().map(_.get(null))
controllers.flatMap { controller =>
controller.getClass().getDeclaredMethods().map { action =>
action.invoke(controller).asInstanceOf[play.core.Router.JavascriptReverseRoute]
}
}
}
def javascriptRoutes = Action { implicit request =>
Ok(Routes.javascriptRouter("jsRoutes")(routeCache:_*)).as("text/javascript")
}
Run Code Online (Sandbox Code Playgroud)
这是从target/scala-2.xx/src_managed中生成的源文件派生的.您实际上可以添加自己的源生成器并自己解析路径文件,但我发现通过反射更容易.
您可能想要做的另一件事是过滤掉您不想要的方法,因为这将为您提供所有路由(包括javascriptRouter本身).
| 归档时间: |
|
| 查看次数: |
1414 次 |
| 最近记录: |