У меня проблема с видом на лифт.Дело в том, что я делаю дорогой удаленный вызов rest-api дважды - там, где мне действительно нужно сделать это только один раз.
Но я не могу понять, как это решить.
В основном у меня есть такой шаблон HTML, который должен отображать список пользователей и их количество:
//UserSearchResults.html
Num users: <span class="lift:UserSearchResults.userCount"></span>
User list:
<ul>
<lift:UserSearchResults.userList>
<li><user:userName/></li>
</lift:UserSearchResults.userList>
</ul>
А затем у меня есть реальный фрагмент кода, который отправляет список пользователей из остальныхAPI-сервер.Тем не менее, обратите внимание, что он действительно делает это ДВАЖДЫ - один раз для подсчета количества пользователей и один раз для рендеринга списка.
//UserSearchResults.scala
/** Get list of users from api */
def users: List[User] = {
val url = "http://server/rest-api/user-search";
val result = io.Source.fromURL(url).mkString
//... parse users into List[User] and return it
return entries
}
/** Render user count */
def userCount =
"* *" #> users.length //<-- ONE call
def userList(in: NodeSeq): NodeSeq = {
users.flatMap(user => Helpers.bind("user", in, //<--SECOND call
"userName" -> user.user_name))
}
Есть ли лучшее место для вызова API?Есть ли подобный «конструктор» для фрагмента, который я могу использовать для кэширования списка пользователей и совместного использования его со всеми функциями в классе?
Любая помощь приветствуется.