2011-06-28 13 views
12

Czy istnieje sposób podnośnika do przekazywania parametrów do fragmentów kodu?Czy fragmenty mogą przyjmować parametry w windzie?

Próbuję napisać pluraize filtr dla mojej strony, która wyświetli słowo „użytkownik” lub „Użytkownikami” w zależności od tego ile istnieją:

1 user 
2 users 

Jak to działa w Django nazywa filters i są one napisane w sposób następujący:

You have {{ num_messages }} message{{ num_messages|pluralize }}. 

Więc tutaj można zobaczyć pluralize funkcja przyjmuje liczbę całkowitą NUM_MESSAGES oraz wyjścia i odpowiedni ciąg znaków - pusty "" lub "s".

EDYCJA: Należy pamiętać, że num_messages w tym przypadku jest rzeczywistą zmienną kontekstową, przekazaną do szablonu z widoku.

Odpowiedz

16

Możesz przekazać parametry do snippetów, tak.

class MySnippet { 
    def foo: NodeSeq = { 
    x = S.attr("myparam") openOr "myparam: Y U NO DEFINED!?" 
    <p>I got {x}!</p> 
    } 
} 

Zastosowanie:

<lift:MySnippet.foo myparam="3"/> 

Lub nowsza Winda 2.3+ styl:

<div class="lift:MySnippet.foo?myparam=3"/> 
+5

wyjątkiem nigdy nie należy używać open_ !. Zamiast tego: val x = S.attr ("myparam") openOr "Dude, myparam nie jest zdefiniowany" –

+0

@David Dobry punkt. Zaktualizowałem przykładowy kod :) – overthink

+0

Hm ... ale czy mogę przekazać wartość kontekstu, np. Num_messages (powyżej) do fragmentu kodu? – drozzy

2
<div id="main" class="cl1 cl2 lift:surround?with=default;at=content"> 

To także wezwanie urywek z parametrami.

patrz Dokumentacja widłowe: Lift docs, 3.4.1 Snippets in markup

w celu wskazania, że ​​zawartość jest dynamiczna, znaczniki zawiera inwokację fragmentu. Zwykle ma to postać class = "someclass someothercss lift: mysnippet". Jeśli atrybut klasy zawiera lift: xxx, xxx zostanie rozpatrzony w urywku. Ten fragment może mieć atrybuty. Atrybuty są zakodowane tak jak parametry URL ... przesunięte o a? (znak zapytania), a następnie nazwa = wartość, separted by? (znak zapytania), ; (średnik) lub & (znak ampersand). nazwa i wartość są zakodowane za pomocą adresu URL.

2

Nie możesz zrobić tego w ten sposób.

<div class="lift:MyClass"> 
    You have <span class="num_messages"/>. 
</div> 

i kod wyciąg będzie wyglądać następująco:

class MyClass { 
def render = "num_messages" #> (num_messages + pluralize("message", num_messages)) 
} 
+0

Świetne rzeczy! Błąkałem się, gdybym mógł wstrzyknąć go do wielu identyfikatorów jednocześnie. Ale to kolejne pytanie ... – drozzy

Powiązane problemy