我必须在 Web 项目上使用 Play 框架,其中我必须将 View 与 Controller 类连接起来。这意味着我必须使用在 Controller (scala)和 View (scala.html)中声明的方法。 我真的不知道怎么办。 我尝试过类似的事情
@controller.class.method()
但是没有成功。 我查了一下,但什么也没找到,也许是因为它太简单了,有人会问它..?
非常感谢您的帮助。
最佳答案
您可以通过以下方式访问模板中的反向路由:
@routes.controllersFolder.MyControllerName.endPointName
这将解析为路线。
例如路线文件:
GET /myApp/endpointExample controllersFolder.MyControllerName.endPointName
所以
@routes.controllersFolder.MyControllerName.endPointName
将解决:
/myApp/endpointExample
如果您想在客户端使用 AJAX,我强烈推荐 JSRoutes .
如果您想拥有 Controller 的功能,那么您应该将其在模块中解耦,例如:
trait MyTrait {
def add(x: Int, y: Int): Int = x + y
}
@Singleton
class MyClass with MyTrait
@Singleton
class MyController @Inject() (myClass: MyClass) extends Controller {
def endPointName(x: String, y: String): Action[AnyContent] = {
try {
Ok(
Json.toJson(
Json.obj(
"result" -> myClass.add(
x = x.toInt,
y = y.toInt
)
)
)
)
} catch {
case e: NonFatal => BadRequest(
Json.toJson(
Json.obj(
"error" -> e.getMessage
)
)
}
}
}
然后您可以引用 MyClass 的逻辑,而无需形成请求,像这样解耦逻辑:
@Singleton
class MyOtherController @Inject() (myClass: MyClass) extends Controller {
def myHtmlPage(): Action[AnyContent] = {
views.html.myView(myClass)
}
}
在 HMTL 中
myView.scala.html:
@(myClass: MyClass)
@myClass.add(1, 2) // = 3
我希望这有帮助, 里斯
关于html - 在 View 中使用 Controller 方法 - Play Framework - Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37697018/