目前我以相当详细的方式定义我的应用程序的 javascript 路由器
def javascriptRoutes = Action { implicit request =>
import routes.javascript._
Ok(Routes.javascriptRouter("jsRoutes")(
Login.method1,Login.Method2,
OtherController.method1,OtherController.method2,
//[...]
)).as("text/javascript")
}
我真正想做的是创建一个javascriptRouter
与所有路线routes
文件,所以我不必手动更新javascriptRoutes
每次我添加新的控制器方法时都会定义。
有没有办法完成这项任务,或者是否有一种稍微不那么冗长的方法来定义javascriptRouter
?
您可以通过反射来做到这一点,如下所示:
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")
}
这是从 target/scala-2.x.x/src_management 中找到的生成源文件派生的。您实际上可以添加自己的源生成器并自己解析路由文件,但我发现通过反射来完成它更容易。
您可能想要做的另一件事是过滤掉您不需要的方法,因为这将为您提供所有路由(包括 javascriptRouter 本身)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)