2009-10-06 7 views
5

że mam rzeczy zasobów z metodą widok pomocnika, takich jak:Czy można uzyskać wcięcie HTML Haml wygenerowane przez pomocnika widoku w Railsach?

module ThingsHelper 
    def foo 
    ret = "" 
    3.times { ret += content_tag(:li, "foo") } 
    content_tag(:ul, ret) 
    end 
end 

to zatem jest używane w szablonie:

%p 
    = foo 

kodzie HTML, który jest generowany wygląda następująco:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Foo</title> 
    </head> 
</html> 
<body> 
    <p> 
     <ul><li>foo</li><li>foo</li><li>foo</li></ul> 
    </p> 
</body> 

Jak widać, wyjście pomocnika nie jest wcięte jako reszta kodu. Jakikolwiek sposób temu zaradzić?

Odpowiedz

10

Wypróbuj haml_tag helper method dostarczony z Haml. W pewnym sensie jest to jak content_tag, ale generuje poprawnie wcięty HTML. Główną różnicą jest to, że przesyła ona bezpośrednio do szablonu, zamiast zwracać ciąg znaków. Na przykład:

module ThingsHelper 
    def foo 
    haml_tag :ul do 
     3.times { haml_tag(:li, "foo") } 
    end 
    end 
end 

(Na marginesie uważany jest za bardzo niedobry styl Rubinowy, aby użyć wcięcia o wartości innej niż dwie spacje).

+0

Pracował świetnie. Blogowany prosty przykład z formaterem dla kolekcji o strukturze drzewa na stronie: http://tumblr.com/xq73f3ypd –

1

Wątpię w to - przynajmniej nie bez znacznej ilości mucking around.

Twój = foo po prostu drukuje to, co jest zwracane przez pomocnika foo - nie jest przetwarzany przez Haml. I nie możesz pisać haml w swojej metodzie pomocniczej.

Najprostszy sposób, w jaki mogę sobie z tym poradzić, to dodanie dosłownie białych znaków w pomocniku (np. \n i \t).

Możesz również require odpowiednie klasy Haml w swoim pomocniku i ręcznie wywołać metody parsowania na ret, ale jest to prawdopodobnie bardziej skomplikowane niż warto.

Powiązane problemy