Jestem właśnie w trakcie migracji widokówek na hamla (polecam jako alternatywę dla standardowego erb) i natknąłem się na kilka “problemów”, które prawdopodobnie zdarzają się większości podczas takich migracji. Otóż jak zmienić poniższy fragment pliku erb?

<script type="text/javascript">
    Sadowbox.init();
    $(document).ready(function() {
        <% unless p.longitude.blank? %>
            <%= draw_google_map p, false %>
        <% end %>
    });
</script>

Odpowiedź wydaje się banalnie prosta, wystarczy użyć filtrów dostępnych w haml’u:

:javascriptscript
    Shadowbox.init();
    $(document).ready(function() {
        - unless p.longitude.blank?
            = draw_google_map p, false
    });

Wszystko wydaje się być ok, jednak gdy spojrzymy w źródło strony okaże się, że warunek sprawdzający czy długość geograficzna jest pusta wstawiony jest jako tekst, nie jest interpretowany. Z pomocą przychodzi #{}, otóż wstawienie kodu wewnątrz tego znacznika pozwala na uzyskanie zamierzonego efektu:

:javascript
    Shadowbox.init();
    $(document).ready(function() {
        #{unless p.longitude.blank?
            draw_google_map p, false
        end}
    });

Istnieje też inne rozwiązanie, można zrezygnować z filtru i posłużyć się standardowym tagiem:

%script{:type => "text/javascript"}
    Shadowbox.init();
    $(document).ready(function() {
    - unless p.longitude.blank?
        = draw_google_map p, false
    });

Proszę zwrócić uwagę na brak wcięcia przed - unless p.longitude.blank?, to wcięcie powodowałoby błąd Illegal nesting: nesting within plain text is illegal.

Podobne posty