rails najlepsze praktyki gdzie umieścić dyskretny javascript

Moje aplikacje rails (wszystkie 2.3.5) używają kombinacji wbudowanego javascript, RJS, prototype i jquery. Nazwijmy to nauką lub bólem dorastania. Ostatnio jestem coraz bardziej zauroczony dyskretnym javascript. Sprawia, że Twój html jest czysty, tak samo jak css go wyczyścił.

Ale większość przykładów, które widziałem są małe przykłady, i umieścić wszystkie javascript (jquery) wewnątrz aplikacji.js

Teraz mam dość dużą aplikację i zastanawiam się nad sposobami, aby uporządkować moje js. I jak jakiś sposób, że mój scenariusz jest nadal blisko widoku, więc myślę o czymś w stylu

orders.html.erb
orders.js

Gdzie rozkazy.js zawiera dyskretny javascript specyficzny dla tego widoku. Ale może to tylko ja jestem zbyt konserwatywny:)

Przeczytałem kilka postów Yehuda Katza o tym właśnie problemie tutaj i tutaj , gdzie zajmuje się tym problemem. Przejdzie przez twoje pliki js i załaduje tylko te istotne dla Twojego widoku. Ale niestety nie mogę znaleźć prądu wdrożenie.

Więc moje pytania:
  • jak najlepiej skonstruować swój dyskretny javascript; zarządzać kodem, jak upewnić się, że jest oczywiste z html, co coś ma zrobić. Myślę, że dobre nazwy klasowe to długa droga:)
  • Jak zorganizować pliki, załadować je wszystkie? tylko kilka? czy używasz content_for :script lub javascript_include_tag w widoku do wczytania odpowiednich skryptów. Albo ... ?
  • czy piszesz bardzo ogólne funkcje (np. delete) , z parametrami (dodać dodatkowe atrybuty?), a może piszesz bardzo konkretne funkcje (suche?). Wiem, że w Rails 3 jest standardowy zestaw i wszystko jest tam dyskretne. Ale jak zacząć w Rails 2.3.5?

W skrócie: jakie są najlepsze praktyki robienia dyskretnego javascript w rails? :)

Author: Sam Saffron, 2010-05-23

3 answers

Nie sądzę, żeby była jedna najlepsza praktyka, ale dam Ci znać, co robię.

  1. W katalogu public/javascripts/ mam serię plików js, każdy dla własnego celu. Przykładami mogą być utility.js chat.js shopping_basket.js i tak dalej.

  2. Używam asset packager i definiuję jedną dużą kolekcję fat dla wszystkich moich ogólnych funkcji użytkowania, a drugą tylko dla administratorów. Podróż w obie strony na serwer kosztuje o wiele za dużo. W zasadzie wrzucam wszystkie js na pierwszy wczytanie strony minifigurowane do jednego Bloba (ogólnie)

  3. Zezwalam na podstawowe $(document).ready Hooki w lini na stronach i zachowuję je naprawdę krótko.

  4. Dane, do których moje pliki js muszą mieć dostęp, są renderowane zgodnie ze stroną. (Zwykle w DOM, czasami jako vars - np. var xyz = 100)

  5. Zwykle rozwijam moje Kontrolery z wyłączonym javascript( i upewniam się, że wszystko działa), a następnie włączam go i posypuję kilka if request.xhr? w razie potrzeby.


Keep in Uwaga, Rail 3.1 wprowadza wbudowaną najlepszą praktykę, patrz: http://guides.rubyonrails.org/asset_pipeline.html - osobiście miałem problemy z wydajnością i konfiguracją nowego potoku, jednak wiele innych odniosło z nim wielkie sukcesy.

 10
Author: Sam Saffron,
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
2012-03-11 08:48:58

Ostatnio udokumentowałem jak byłem zarządzającym javascript w Ruby on Rails. Zasadniczo dzielę rzeczy na wiele małych, ziarnistych plików, każdy z odpowiednią przestrzenią nazw, a następnie scalam je wszystkie w jeden plik do produkcji za pomocą asset_packager.

 3
Author: Toby Hede,
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
2010-05-29 13:16:08

Znalazłem ten post próbując rozwiązać ten sam problem, ale żadne z istniejących rozwiązań nie uderzyło mnie jako właściwe. Spisałem swoje podejście tutaj. uwielbiam konwencję Rails ponad konfigurację, więc chciałem tego samego podejścia do włączania Javascriptów, które mają zastosowanie tylko do konkretnej strony akcji. Jeśli nic innego, to przynajmniej inne podejście, aby dodać do swoich opcji.

 1
Author: jxpx777,
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
2014-09-30 02:53:09