gpt4 book ai didi

scala - 生成 Play 2 的 javascript 路由器的更简洁的方式

转载 作者:行者123 更新时间:2023-12-04 02:53:29 25 4
gpt4 key购买 nike

目前我以相当冗长的方式定义了我的应用程序的 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每次我添加一个新的 Controller 方法时定义。

有没有办法完成这项任务,或者是否有一种稍微不那么冗长的方式来定义 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_managed 中找到的生成的源文件派生的。您实际上可以添加自己的源生成器并自己解析路由文件,但我发现通过反射更容易做到这一点。

您可能想要做的另一件事是过滤掉您不想要的方法,因为这将为您提供所有路由(包括 javascriptRouter 本身)。

关于scala - 生成 Play 2 的 javascript 路由器的更简洁的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12012703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com