Play Framework 2.4 在 Scala 模板中使用注入变量
Play Framework 2.4 use injected variable in Scala template
我想在我的网页的菜单栏中显示数据库中的一些数据。为了获取数据,我有一个通常使用 Guice 注入创建的数据访问对象 (DAO)。
如何在我的 Scala 模板中使用这样的(注入的)对象?
我可以将它作为参数传递给模板,但我必须在每个页面上都这样做(因为它应该显示在菜单栏中)。我正在寻找另一种解决方案,我不必在任何地方传递它。目前我正在模板中创建一个新对象,每当它被渲染时(这让我的代码更清晰但性能更差)。
你可以毫不费力地伪造它。
首先,创建一个提供对 DAO 的访问的 Scala 对象(它可以包含任意数量的内容,只需在顶级对象和 Implicits 对象中重复该模式)。
package com.example.stuff
object ViewAccessPoint {
private[stuff] val myDaoCache = Application.instanceCache[MyDao]
object Implicits {
implicit def myDao(implicit application: Application): MyDao = myDaoCache(application)
}
}
在您看来,您随后可以将隐式对象导入您的模板并获取由 Guice 创建的 DAO。
@import com.example.stuff.ViewAccessPoint.Implicits._
@import play.api.Play.current
myDao.whatever()
这适用于 Java 和 Scala 项目。
您可以在此处实际看到这一点:
附带说明一下,我会考虑您是否真的想在模板层中进行数据访问。
我想在我的网页的菜单栏中显示数据库中的一些数据。为了获取数据,我有一个通常使用 Guice 注入创建的数据访问对象 (DAO)。
如何在我的 Scala 模板中使用这样的(注入的)对象?
我可以将它作为参数传递给模板,但我必须在每个页面上都这样做(因为它应该显示在菜单栏中)。我正在寻找另一种解决方案,我不必在任何地方传递它。目前我正在模板中创建一个新对象,每当它被渲染时(这让我的代码更清晰但性能更差)。
你可以毫不费力地伪造它。
首先,创建一个提供对 DAO 的访问的 Scala 对象(它可以包含任意数量的内容,只需在顶级对象和 Implicits 对象中重复该模式)。
package com.example.stuff
object ViewAccessPoint {
private[stuff] val myDaoCache = Application.instanceCache[MyDao]
object Implicits {
implicit def myDao(implicit application: Application): MyDao = myDaoCache(application)
}
}
在您看来,您随后可以将隐式对象导入您的模板并获取由 Guice 创建的 DAO。
@import com.example.stuff.ViewAccessPoint.Implicits._
@import play.api.Play.current
myDao.whatever()
这适用于 Java 和 Scala 项目。
您可以在此处实际看到这一点:
附带说明一下,我会考虑您是否真的想在模板层中进行数据访问。