2011-09-22 14 views
22

Próbowałem użyć szablonów underscore.js do szablonów w aplikacji rails 2.3, która ma , a nie ma jammit jako narzędzie do pakowania zasobów.Szyny z szablonami Underscore.js

Oto prosty szablon:

<script type="text/template" id="q-template"> 
    <div class="current-body"> 
     <span class="q-index"><%= title %></span> 
     <span class-"q-text"><%= body %></span> 
    </div> 
</script> 

Rails próbuje zanalizować te zmienne jak erb i zgłasza ArgumentError. Jak w tym przypadku uzyskać szablony podkreślenia, aby ładnie grać z szynami? Gdzie się mylę?

Odpowiedz

52

Użyj innych ograniczników zamiast <%= %>. Na przykład, aby użyć nawiasów wąsy w stylu {{= }} (interpolować) i {{ }} (oceny), dodaj to gdzieś JavaScript:

_.templateSettings = { 
    interpolate: /\{\{\=(.+?)\}\}/g, 
    evaluate: /\{\{(.+?)\}\}/g 
}; 
+0

Dzięki, to działa. Przechodziłem przez dokumentację dla _.template i _.templateSettings był tam wspomniany, ale jakoś pominąłem mój umysł, kiedy przygotowywałam projekt i ciągle myślałem, że to może być związane z jammitem. – papdel

+3

Dzięki za FYI: http://documentcloud.github.com/underscore/#template i http://stackoverflow.com/questions/5771742/underscore-js-templates-within-jsp – Francois

+6

Używanie '{{}}' i ' {{=}} 'może powodować problemy, jeśli chcesz używać bloków stylu" if (x) {} "w swoich szablonach. Łatwiej jest w tym przypadku użyć '[%%]' i '[% =%]' zamiast: –

25

Jeśli nie chcesz zmienić ustawienia szablonu obrębie całego projektu .. .

Ucieczka ERB tagi: <%= staje <%%=

<script type="text/template" id="q-template"> 
    <div class="current-body"> 
     <span class="q-index"><%%= title %></span> 
     <span class-"q-text"><%%= body %></span> 
    </div> 
</script> 

Zauważ, że znacznik zamykający jest sti ll %>, a nie %%>.


Notatka poboczna - Próbowałem również wyprowadzać za pomocą heredoc. Poniższy kod działa poprawnie, ale generuje pakiet kodu źródłowego erb, który zostaje przechwycony między poleceniami heredoc.

<script type="text/template" id="q-template"> 
<%= <<-heredoc %> 
    <div class="current-body"> 
     <span class="q-index"><%%= title %></span> 
     <span class-"q-text"><%%= body %></span> 
    </div> 
heredoc 
</script> 
Powiązane problemy