Вкратце: Нет. Дизайн Lift строго отделяет логику от дизайна и поэтому запрещает использование обобщенных тегов в разметке шаблона.
Ознакомьтесь с первой статьей view inЧтобы увидеть, как лифт может обрабатывать итерации.
Пример из статьи: Ваша разметка:
<table>
<lift:show.users>
<tr>
<td><f:first_name>David</f:first_name></td>
<td><f:last_name>Pollak</f:last_name></td>
</tr>
</lift:show.users>
</table>
Ваш код:
class Show {
def users(xhtml: NodeSeq): NodeSeq =
Users.findAll.flatMap(user =>
bind("f", xhtml,
"first_name" -> user.firstName,
"last_name" -> user.nameName
)
)
}
Теперь, что делает лифткогда он видит тег, <lift:show.users>
вызывает соответствующий метод с содержимым тега в качестве аргумента.Затем тег будет заменен возвращаемым значением метода users
.
Метод users
выполняет итерацию по всем Users
, и для каждого пользователя он bind
s определяет значения первогои второе имя для внутреннего xhtml
.Все эти итерации затем объединяются (через flatMap
) и возвращаются.
Когда я начинал с лифта, я всегда считал этот подход слишком жестким;Крошечная петля здесь и там, как это может повредить?Но теперь, когда я знаю, как просто вызывать и для создания своих собственных фрагментов из кода шаблона, я не могу больше использовать что-то вроде jsp.Это слабое сравнение и загромождает вашу разметку.И, конечно, вы теряете большую часть силы проверки Scala.
Примечания:
Причина, по которой теги шаблонов заполнены содержимым, предназначена для целей проектирования.В этом случае фиктивные теги и значения будут заменены во время bind
.Таким образом, разработчики шаблонов могут заполнять теги более или менее значимым содержимым, что позволяет кодировщику лучше понимать семантику, которую имел в виду дизайнер.