gpt4 book ai didi

playframework - Play Framework 2.1 模板上的动态路由

转载 作者:行者123 更新时间:2023-12-04 06:14:22 27 4
gpt4 key购买 nike

以 Java 计算机数据库示例作为 Play 的起点! 2.1 我正在为大约 20 个模型开发一个 CRUD 管理后端。我面临的问题是在模板级别一遍又一遍地重复相同的功能。

我试图将链接函数重构为:

@****************************************
* Helper generating navigation links *
****************************************@
@link(newPage:Int, newSortBy:String) = @{
// Generate the link
controllers.admin.routes.Model.index(newPage, "id", newSortBy)
}


@(controller: Any, newPage: Int, newSortBy: String)
any.index(newPage, "id", newSortBy)

由于反向路由器不从任何特定类继承,因此我无法以通用方式进行。并且前面的代码不起作用,因为我没有进行类型转换(我猜是因为编译器错误是“值索引不是 Any 的成员”)

有什么方法可以在运行时获取已定义路由的列表?无论它是在 Scala 模板中还是在 Java 端,我都可以传递 Controller 名称并获得正确的反向路由器来创建 URL。

如果不可能,那么重构所有重复模板的代码的正确方法是什么,特别是那些依赖于 ReverseRouters 的代码。

最佳答案

我还没有找到动态获取路由器和反向路由器列表的方法,但是我找到了一种方法来限制样板代码的数量,并且能够将模板函数重构为自己的文件,使代码更易于管理.

我发现 Scala 并不是 Java 的另一种说法!!!具体来说,您可以将函数作为参数传递给函数( http://oldfashionedsoftware.com/2008/08/23/fun-with-scala-functions/ ),这样您就可以从主模板(一种 DI)传递要在子模板上执行的一段代码。

在我发布的示例中,问题是将反向 Controller 传递给主模板中的子模板,但“反向 Controller ”不扩展任何特定对象。示例中的代码是:

模板.scala.html

...
...
@****************************************
* Helper generating navigation links *
****************************************@
@link(newPage:Int, newSortBy:String) = @{
// Generate the link
controllers.admin.routes.MyController.index(newPage, "id", "asc")
}
...
...
@**********************************
* Helper generating table headers *
***********************************@
@header(key:String, title:String) = {
<th class="">
<a href="@link(0, key)">@title</a>
</th>
}
...
...

重构 header函数到它自己的模板,我必须能够调用 link功能。使用重构文件中的包含将不起作用,因为反向 Controller 是在 link 中硬编码的。功能。解决方法是提取 header函数到子模板并将模板的参数定义为函数:

View /utils/header.scala.html
@(key: String, title:String, link: (Int) => Html)
<th class="@key">
<a href="@link(0)">@title</a>
</th>

现在在模板中:

View /管理员/template.scala.html
...
@import utils._
...
@link(newPage:Int) = {
@controllers.admin.routes.MyController.index(newPage, "id", "asc")
}
...
@header("key", "title", link _)
...

现在,我只需要定义 link每个主模板的函数,并将其作为参数传递给任何需要它的子模板。不完全干净,但减少了很多样板并简化了模板更改。

希望它可以帮助其他人。更好的解决方案吗?

关于playframework - Play Framework 2.1 模板上的动态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15864957/

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