2016-02-13 2 views
0

Я ищу, чтобы отобразить некоторые шаблоны и передать вложенные объекты. Я не видел много примеров этого. Он компилируется, но Im больше ищет идеи о том, насколько идиоматичен подход.Scala Play Framework templating complex objects

Например, говорят следующие классы случая построены из Slick запроса к базе данных

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

При условии вашего Slick запрос правильно заполнит ThemedListOfAlbums.albums и Album.songs тогда я не понимаю, почему это не будет работать

Я был бы более интересно посмотреть на видах запросов вас» поскольку такой подход может очень быстро привести к большому количеству запросов к базе данных для одной страницы.

Например, один запрос может легко получить список Album для корневого объекта, но если каждый Album затем создает запрос базы данных для списка связанных Songs, тогда у вас будет огромное количество запросов к базе данных, особенно y учитывая, что ваше мнение содержит список ThemedListOfAlbums

+0

Это, безусловно, соображение, и это почти заставляет меня думать о денормализованном или nosql решении и просто возвращать весь blob. Тем не менее, ThemedList является результатом системы рекомендаций по пакету (пользователь не выполняет поиск), который заполняется в db - каждый пользователь будет иметь только 5-10 возможных ThemedLists в данный момент времени. Я мог бы также создать материализованное представление. – Azeli

+0

Вид, безусловно, является вариантом, который может уменьшить общее количество запросов, но при этом скорее всего будет возвращено много повторяющихся данных. Единственное предложение, которое я могу дать, не понимая ваше решение более подробно, было бы, возможно, переосмыслить структуру вашей страницы, чтобы учесть это. Таким образом, вместо того, чтобы возвращать все 'песни' в каждом альбоме, возможно, просто перечислите каждый «альбом» на одной странице, причем каждая ссылка на другую страницу перечислит их 'song's. – Ryuu