2011-09-16 14 views
5

W projekcie Rails 3.1.0 mam firmy z kilkoma konfigurowalnymi atrybutami, takimi jak background_color i link_color. Chcę móc ustawić niektóre zmienne Sass tak:Jak mogę uzyskać dostęp do obiektów Railsowych w Sassie?

$background_color: <%= @company.background_color %> 
$link_color: <%= @company.link_color 

... 

To nie działa, ponieważ @company nie występuje gdy Sass robi jego rzecz. Nie jestem pewien, jak rozwiązać ten problem w sposób dynamiczny (można tworzyć firmy, zmieniać kolory i natychmiast aktualizować widoki). Jakieś sugestie?

+0

Tylko jedna na stronę/stronę. – complex

Odpowiedz

0

myślę, że może być w stanie coś zrobić, podobnie jak to, co tam masz, ale trzeba zmienić rozszerzenia plików do „.css.scss.erb”

+0

Ach, powinienem był wspomnieć, że próbowałem tego. Jest w application.css.sass.erb, ale nie ma kości. – complex

+0

następnie myślę, że musiałbyś uruchomić żądanie przez kontroler, więc stwórz tagi linków, które kierują do kontrolerów, które odpowiadają na żądania css lub coś – Matthew

1

mogę myśleć o kilku podejściach z góry mojej głowy:

  1. Podaj arkusz stylów za pomocą kontrolera.
  2. Użyj klas CSS, aby skonfigurować kolory i wyświetlać tylko te arkusze CSS za pomocą kontrolera, częściowego wyrażenia lub CSS @import.

Obsługa arkusza stylów za pomocą kontrolera jest dość prosta, więc nie ma wiele do powiedzenia. To może być trochę brzydkie i kłopotliwe.

Na drugim, musisz dodać kilka dodatkowych klas CSS:

.custom-bg { 
    background-color: some-default-bg; 
} 
.link-fg { 
    color: some-default-fg; 
} 
/*...*/ 

Następnie każdy element, który trzeba użyć niestandardowego koloru tła musiałby ich zwykłych klas CSS i custom-bg; podobne shenanigany będą potrzebne dla innych konfigurowalnych wartości. Aby dostarczyć spersonalizowany arkusz CSS, możesz wstawić element <style> do kodu HTML za pomocą standardowej części ERB lub możesz przesłać CSS za pośrednictwem kontrolera (przez <style src="..."> lub @import). W ten sposób można sfałszować SASSy dobro ze starszej szkoły wieloma klasami CSS w kodzie HTML.

Istnieje również JavaScript. należałoby jakiś sposób zidentyfikować elementy, które muszą dostosować ich kolory, a następnie dostosować je bezpośrednio z rzeczy tak:

$('.need-custom-background').css('background-color', '...'); 
0

Aby śledzić na to, zrobiłem utworzyć kontroler stylów, ale to było raczej wymyślony do Pobierany parsowanie Sass i ścieżki ładowania potoku działają poprawnie. Zrzuciłem to i zreorganizowałem style, aby wygenerować statyczny arkusz stylów dla każdej firmy, który zostanie zregenerowany i przesłany do S3 w sprawie aktualizacji firmy.

Powiązane problemy