2016-02-13 95 views
0

我正在尋找渲染一些模板並傳入嵌套對象。我沒有看到很多這樣的例子。它編譯,但我更多的想法如何慣用的方法。Scala Play框架模板複雜對象

例如,假設下面的情況類是從一個油滑的數據庫查詢

case class ThemedListOfAlbums(
themeName: String, 
description: String, 
albums: List[Album] 
) 
case class Album(
name: String, 
artist: String, 
imageUrl: String 
songs: List[Song] 
) 
case class Song(
name: String, 
imageUrl: String, 
description: String 
) 

是它然後就像經過複雜的對象?:

@(user: User, catalogs: List[ThemedListOfAlbums]) 
//stuff 
<ul> 
@for(c <- catalogs) { 
//?? want to render a partial for each catalog with a list of album images 
     //with song names on them 
} 

簡單建在我需要重新思考我想要完全呈現的內容之前,嵌套層次是否有限制?

如果這個例子符合「做你的作業」的問題,那麼這個例子的鏈接將會很有幫助。不能似乎找到任何相關信息

+1

我認爲通過'ThemedListOfAlbums'清單並且使用它們是完全正確的,但是你需要顯示你想要的東西。 –

回答

0

前提是你的油滑查詢正確填充ThemedListOfAlbums.albumsAlbum.songs那麼我不明白爲什麼這是行不通的

我會更感興趣,看到種你的查詢」重新使用,因爲這種方法可以非常快速地導致單個頁面的大量數據庫查詢

例如,一個查詢可以很容易地獲得根對象的Album的列表,但是如果每個Album然後使得數據庫調用相關的列表Songs,那麼你將有大量的數據庫請求,特別是考慮你的觀點包含的列表ThemedListOfAlbums

+0

這當然是一個考慮因素,幾乎讓我思考一個非規範化或nosql解決方案,並返回整個blob。然而,ThemedList是批處理推薦系統(用戶不搜索)的結果,該系統在db中被填充 - 每個用戶在給定時間只有5到10個可能的主題列表。我也可以創建物化視圖 – Azeli

+0

視圖絕對是一個可以減少查詢總數的選項,但這樣做很可能會返回大量重複數據。我可以給出的唯一建議是,如果不更詳細地瞭解您的解決方案,可能會重新考慮您的頁面結構來解決此問題。因此,不要將每個'專輯'中的所有'歌曲'都帶回來,可能只是在一個頁面上列出每個'專輯',每個鏈接到另一個列出他們'歌曲'的頁面。 – Ryuu