html - 在 View 中使用 Controller 方法 - Play Framework - Scala

标签 html scala playframework

我必须在 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/

相关文章:

斯卡拉 : Does variable type inference affect performance?

java - LWJGL 和 Ogg/Mp3

database - Play + Slick + HikariCP 应用程序中的加密数据库密码

javascript - 使用 jQuery 将字段添加到表中的 HTML 表单

html - 如何使用 Jade 设置空属性?

javascript - 如何在彩盒中打开网页?

scala - 将主键获取为整数的最佳语法

php - 如何在 php 中使用 UL 将多组 LI 包装在一个字符串中

java - 如何在Play项目中添加Play Ebean?

java - 在 Play 框架中同时使用 CRUD 和安全模块