2015-10-04 84 views
1

我想在我的網頁的菜單欄中顯示數據庫中的一些數據。爲了獲取數據,我有一個通常使用Guice注入創建的數據訪問對象(DAO)。Play Framework 2.4在Scala模板中使用注入變量

如何在Scala模板中使用這樣的(注入)對象?

我可以將它作爲參數傳遞給模板,但我必須在每個頁面上執行此操作(因爲它應顯示在菜單欄中)。我正在尋找另一個解決方案,我不必將它傳遞到任何地方。目前,我在模板中創建一個新的對象,每當它被呈現時(這會讓我得到一個更乾淨的代碼,但性能更差)。

+0

我不認爲有一個簡單的方法來實現你想要的,但我認爲答案[這裏](http://stackoverflow.com/questions/9629250/how-to-avoid-passing-parameters-無處不在2)可以提供幫助。 –

+0

您是否可以在單獨的模板中抽象菜單欄以避免在每個模板中傳遞參數? – Adi

+0

@BhashitParikh:感謝您的鏈接,它確實是一個可行的選擇。但是,仍然不是我想要的。 – Itchy

回答

3

你可以在沒有太多努力的情況下分類假。

首先,創建一個提供對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的項目。

您可以在實踐中這裏看到:

在一個側面說明,我會考慮,如果你真的想在你的模板層,以做數據訪問。

+0

謝謝,您爲我節省了大量時間,無需將對象傳遞給100多個模板。 – dingdong

+1

在你的模板中,你還需要'@import play.api.Play.current'來完成這個工作。 – Itchy

+0

@Itchy編輯,謝謝。 –

相關問題