Od wielu dni starałem się zrozumieć, dlaczego prosty link jak ten:Różnica między application.haml a application.html.haml?
link_to 'My Link', my_path(format: :js), remote: true
zawsze wraca pełny dokument HTML zamiast wykonania JavaScript zlokalizowany w moim file.js.erb:
alert('hello world')
[...]
Po godzinach debugowanie znalazłem dlaczego:
Kiedy zmienić nazwę mój główny układ złożyć takie jak: application.haml
to świadczy pełny dokument HTML:
Started GET "/my_path/2.js" for 127.0.0.1 at 2016-03-05 12:28:20 +0100
Processing by MyController#show as JS
Rendered my_path/show.js.erb within layouts/application (0.1ms)
Rendered layouts/_sidebar.html.erb (18.9ms)
Rendered layouts/_headbar.haml (0.5ms)
Rendered layouts/_flash_messages.html.haml (0.2ms)
Rendered layouts/_footer.html.erb (0.1ms)
Completed 200 OK in 102ms (Views: 59.3ms | ActiveRecord: 2.9ms)
Kiedy zmienić nazwę mój główny plik układu, takich jak: application.html.haml
to wykonuje javascript prawidłowo i działa mój hello world popup:
Started GET "/my_path/8.js" for 127.0.0.1 at 2016-03-05 12:28:34 +0100
Processing by MyController#show as JS
Rendered my_path/show.js.erb (0.1ms)
Completed 200 OK in 24ms (Views: 21.8ms | ActiveRecord: 0.4ms)
Dlaczego zachowanie javascript różni się w zależności od różnych nazw plików w moim układzie?
Nie jest to zachowanie javascript, tak jak rails szuka szablonów. Najpierw wyszukaj '. ', następnie dla '. '. Więc jeśli masz ogólny szablon bez formatu, zostanie on pobrany dla wszystkich formatów. –
BroiSatse
Jeśli brakuje jakiegoś szablonu widoku dla akcji, szyny zgłaszają błąd, który mówi, w jaki sposób go szukają, w tym ścieżkę, format itp. Dzięki tym informacjom poznasz kolejność wyszukiwania. – canoe