Каков предпочтительный способ Lift для обработки условного содержимого в шаблоне? - PullRequest
4 голосов
/ 28 августа 2011

Каков предпочтительный способ Lift для обработки условного содержимого в шаблоне?

В качестве конкретного примера давайте представим общую конструкцию кнопки типа «Добавить в избранное». Если нет в избранном, есть кнопка, чтобы добавить его. Если он уже в избранном, есть кнопка для его удаления. Примерно так:

<div class="lift:MySnippet">

  <!-- other stuff -->

  <div class="favorite">
    <form id="doFavorite" class="lift:MySnippet.favorite?form=post">
      <input type="submit" value="Add to Favorites" />
    </form>
    <form id="doUnfavorite" class="lift:MySnippet.unfavorite?form=post">
      <input type="submit" value="Remove from favorites" />
    </form>
  </div>

  <!-- other stuff -->

</div>

Я не вижу очевидного способа во фрагменте (с помощью связывания или CSS-преобразователей) условно сохранять одну форму по сравнению с другой, основываясь на соответствующем "предпочтительном" состоянии.

Исходя из опыта Java / SpringMVC / JSP, это можно решить с помощью простого оператора <c:choose>, но, потратив столько времени на выяснение этого, я могу только предположить, что я собираюсь сделать это полностью назад ...

Заранее спасибо, Лифт Гуру!

Ответы [ 2 ]

6 голосов
/ 29 августа 2011

Я не претендую на звание гуру лифта, но вот два варианта, которые мне кажутся разумными:

Имеется один фрагмент, например, DoOrUndoFavorite, и в этом фрагменте вы можете проверить предпочтительное состояние для пользователя и отобразить одну или другую (if(favorited){...} else{...}) форму.

или

Сохраните ваши фрагменты как есть, и в коде рендеринга каждого фрагмента верните Nil в качестве NodeSeq для вашей привязки, если этот фрагмент не должен отображаться.

1 голос
/ 19 июля 2012

Я думаю, что в этом сообщении из вышеупомянутого списка рассылки лифта демонстрируется условный html:

https://groups.google.com/forum/?fromgroups#!searchin/liftweb/conditional$20view/liftweb/CQG-wTx_qkc/pbD6PURwbksJ

, убедитесь, что нажали "показать цитируемый текст", чтобы увидеть соответствующий ответэто цитата, на всякий случай:

>On Oct 18, 10:05 pm, "Jason Anderson" < jla...@gmail.com> wrote:
> Ah, that makes sense
>
> perhaps the simple/*.html pages in the lift example should be
> changed to use this style of rendering rather than embedding the 
> templates in the snippet?
>
> it would also give you a chance to implement/test out that attribute
> binding for links you mentioned in another reply
>
> On 10/18/07, David Pollak < d...@athena.com> wrote:
>
>
>
> > Jason,
>
> > <lift:snippet type="...">
> > <cond:true>
> > <table> 
> > <tr><td><f:name/></td></tr>
> > </table>
> > </cond:true>
>
> > <cond:false>
> > Hey, there are no users... sorry
> > </cond:false>
> > </lift:snippet>
>
> > You can represent both cases (or even multiple cases) in the XHTML
> > and let the snippet decide which subsection of the XHTML to use. 
> > Given Scala's amazing XML handling capaibilities, it's a single line
> > of Scala code to select the code block:
>
> > val trueBlock = (xhtml \ "true").filter(_.prefix == "cond").headOr 
> > (<span>Template not defined</span>)
>
> > It does make the template look a little ugly, but no worse than an
> > ERB or JSP block looks.
>
> > Also, the <cond:.../> is a convention I've been using, but you can 
> > use any tags (e.g., <users:some> & <users:none>)
>
> > Thanks,
>
> > David*
...