2016-02-13 84 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