Jak Ruby on Rails wykorzystuje yield do układów?
yield
służy do wywołania bloku. Jak to działa w Rails gdzie yield
jest używany do układów?
-# application.html.haml
%body= yield
Używa gdzieś bloków, czy metoda jest po prostu nadpisana?
2 answers
Technicznie, yield
wywołuje blok również w tym kontekście. Blok jest jednak widokiem, który ma być renderowany przez akcję kontrolera.
Na przykład, załóżmy, że masz StaticContentController
, który zawiera index
akcję, która reprezentuje Twoją stronę główną. Po prawidłowym skonfigurowaniu tras odwiedzasz stronę główną. Rails załaduje plik układu w views/layouts
, który jest odpowiedni dla tego kontrolera (application.html.haml
, chyba że przepisz to układem dla kontrolera). Gdy osiągnie yield
polecenie, wstawia widok w views/static_content/index.html.haml
w miejscu, w którym yield
znajduje się wewnątrz układu. Następnie ładuje resztę pliku układu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-31 23:36:00
Domyślnie wszystkie funkcje Rubiego mogą być przekazywane w bloku:
def twice yield yield end > twice { print 'hi ' } => hi hi
Najlepszym sposobem myślenia o układzie jest metoda, która jest wywoływana z blokiem.
Kiedy Rails renderuje szablon, to wywołuje wywołanie Layout#render. Layout#render akceptuje domyślny blok. Domyślnie Rails przekazuje Widok jako ten blok. Oznacza to, że wywołanie wydajności z wnętrza układu jest jak wywołanie domyślnego bloku, który w tym przypadku jest Twoim widokiem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-01 00:20:48