我想在我的網頁的菜單欄中顯示數據庫中的一些數據。爲了獲取數據,我有一個通常使用Guice注入創建的數據訪問對象(DAO)。Play Framework 2.4在Scala模板中使用注入變量
如何在Scala模板中使用這樣的(注入)對象?
我可以將它作爲參數傳遞給模板,但我必須在每個頁面上執行此操作(因爲它應顯示在菜單欄中)。我正在尋找另一個解決方案,我不必將它傳遞到任何地方。目前,我在模板中創建一個新的對象,每當它被呈現時(這會讓我得到一個更乾淨的代碼,但性能更差)。
我想在我的網頁的菜單欄中顯示數據庫中的一些數據。爲了獲取數據,我有一個通常使用Guice注入創建的數據訪問對象(DAO)。Play Framework 2.4在Scala模板中使用注入變量
如何在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)
}
}
在您的觀點中,您可以將Implicits對象導入到您的模板中,並獲取由Guice創建的DAO。
@import com.example.stuff.ViewAccessPoint.Implicits._
@import play.api.Play.current
myDao.whatever()
這適用於Java和Scala的項目。
您可以在實踐中這裏看到:
在一個側面說明,我會考慮,如果你真的想在你的模板層,以做數據訪問。
我不認爲有一個簡單的方法來實現你想要的,但我認爲答案[這裏](http://stackoverflow.com/questions/9629250/how-to-avoid-passing-parameters-無處不在2)可以提供幫助。 –
您是否可以在單獨的模板中抽象菜單欄以避免在每個模板中傳遞參數? – Adi
@BhashitParikh:感謝您的鏈接,它確實是一個可行的選擇。但是,仍然不是我想要的。 – Itchy