Każdy, kto wie o potoku Railsowym, wie, że domyślne zachowanie dotyczy wszystkich plików JavaScript zawartych w manifeście, które można zrolować w jedną dużą, niezręczną, niefortunną piłkę.JavaScript specyficzny dla strony Railsów: jaka jest najlepsza praktyka?
ALL THE JAVASCRIPT -> application.js
Oznacza to, że jeśli masz JavaScript foo.js plików, to będzie aktywować nie tylko dla stron zawartych przez foo kontrolera, ale także dla każdej innej strony.
Jest to bardzo łatwe w obsłudze, ale zastanawiam się, jaki jest najlepszy sposób na zrobienie tego.
Pierwotnie miałem application.html.erb przekazać bieżący kontroler i działanie do JavaScript w mojej aplikacji przy użyciu tagu JavaScript.
<%= javascript_tag do %>
window.givenController = "<%= controller_name %>";
window.givenAction = "<%= action_name %>";
<% end %>
W moich plikach js, chciałbym następnie otoczyć konkretną stronę kodową na kontrolerów nazwanych plików z tego typu if aby upewnić się, że tylko prowadził na tych stronach.
if(givenController == "foo" && givenAction == "bar"){
doStuff();
}
Mój szef twierdzi, że to stwarza niepotrzebne zmienne i zasugerował, że zamiast używać if wskazując konkretnych elementów JQ na stronie:
if($("#some-element-in-foo").length > 0){
doStuff();
}
Chociaż jestem oczywiście oczekiwać, aby śledzić mojego szefa wskazówek, jestem w konflikcie o tym, jak powinienem podejść do tego w przyszłych aplikacjach. Myślę, że moje podejście jest bardziej ekspresyjne i elastyczne niż sugerowane, ale może brakować pewnych wad krytycznych.
Co sądzisz o tych dwóch praktykach, zarówno samodzielnie, jak i wobec siebie nawzajem, i dlaczego? Jakie mogą być lepsze sposoby rozwiązania tego samego problemu?
Inną opcją jest użycie atrybutów danych zamiast klas. Myślę, że byłoby trochę czysto dodać kontroler danych i akcję danych do tagu ciała zamiast klas. – elevine
Również inna dobra opcja @elevine. Zwykle mam również te klasy na tagach body dla deklaracji CSS kontrolowanych na celowniku, więc w moim przypadku zabijam dwa ptaki. –