Moving Menu

Kilka sztuczek dla Railsów i gemu Turbolinks

corner Mateusz Sagan
Mateusz Sagan
2015-07-15
corner Kilka sztuczek dla Railsów i gemu Turbolinks
Ruby on Rails od 4.0 zawiera domyślnie gem Turbolinks. Jest to ciekawy sposób na zmniejszenie czasu ładowania strony. Zamiast przeładowywania strony w całości, wczytywania wszystkich arkuszy CSS i kodu JavaScript dla każdej zmiany - Turbolinks zamienia treść (body) oraz tytuł. Oczywiście może to czasami sprawiać problemy.

Przechowywanie sesji jest dobrą praktyką, ale należy mieć na uwadze wycieki pamięci. Im więcej kodu jQuery zostanie użyte tym większe, będzie prawdopodobieństwo dwukrotnego wczytywania skryptów (albo braku ich wczytywania). Najbardziej powszechny błąd popełniany przez początkujących jest związany z użyciem $(document).ready(), który oczywiście nie jest wywoływany ponownie, ponieważ strona nie została ponownie odświeżona. Zamiast tego lepiej użyć funkcji $(document).on("page:load"); - ale to również nie rozwiązuje wszystkich problemów.

Gem na który zasłużyliśmy, ale nie ten, który potrzebujemy

Jeżeli dla przykładu chcielibyście wyłączyć "turbolinkowanie" dla określonego anchor'a wystarczy dodać do niego klasę data-no-turbolink. Jeżeli posiadacie więcej linków dla których "turbolinkowanie" powinno być wyłączone wystarczy umieścić je w div'ie z tą samą klasą i gotowe. Odwrotnie, jeżeli chcecie przekierować coś przez "turbolinkowanie" gem ten zawiera gotową metodę redirect_via_turbolinks_to, która zrobi to znacznie szybciej.

jQuery? Ależ oczywiście!

 Większość problemów z jQuery i Turbolinks może być rozwiązanych w prosty sposób dzięki gemowi jQuery.Turbolinks. Sprawia on, że funkcja $(document).ready()jest uruchamiana bez względu na to, czy strona została oświeżona, czy też przeładowana z użyciem Turbolinks.

Nie takie proste jak się wydaje

Czasami nawet jeśli użyliśmy już wszystkich sztuczek i w dalszym ciągu nie rozwiązały one wszystkich naszych problemów musimy pójść dalej. Swego czasu napotkałem problemy przy próbie połączenia Turblolinks z Addthis script - skrypt zwyczajnie nie chciał się ładować. Problem polegał na tym, że Addthis ustawiał pewne właściwości window, które nie były wyczyszczone - ze względu na wspomniane wcześniej utrzymywanie sesji. Nie chciałem wyłączać "turbolinkowania" tylko i wyłącznie w celu naprawy jednego małego szczegółu. Dlatego też musiałem znaleźć jakiś niekonwencjonalny sposób na rozwiązanie tego problemu. Zdołaliśmy wspólnie rozwiązać problem poprzez czyszczenie właściwości jedna po drugiej dzięki funkcji, którą napisaliśmy samemu. Poniżej zamieszczam kod tej funkcji:

addthisInit = function() {

  // Remove all global properties set by addthis, otherwise it won't reinitialize
  if(window.addthis) {
       window.addthis = null;
        window._adr = null;
        window._atc = null;
        window._atd = null;
        window._ate = null;
        window._atr = null;
        window._atw = null;
    window.addthis_share = null;
  }


  // Finally, load addthis
  $.getScript("http://s7.addthis.com/js/300/addthis_widget.js#async=1", function(){
    addthis.toolbox('.addthis_toolbox');
  });
    // addthis.init();

  // });
}
$(document).ready(addthisInit);

Następnie pozostało umieszczenie//=require addthis w pliku [layout].js. Mam nadzieję, że to drobne obejście, a także informacje na temat gemu Turbolinks same w sobie oszczędzą Wam czasu na rozwiązanie kilku problemów. Jak zawsze pytania i komentarze mile widziane :)

 

BinarApps

Opublikowaliśmy ten wpis dzięki uprzejmości zespołu z firmy BinarApps. Wpisy o Ruby znajdziecie także na ich blogu

www.binarapps.com/blog/

comments powered by Disqus

Powiązane

photo corner
Pięć najlepszych gemów Ruby, które pokochasz!

Każdy programista jest inny - każdy posiada swój ulubiony edytor kodu i system operacyjny. Każdy słucha innego rodzaju muzyki w czasie pracy, bądź nie słucha jest wcale. Pomimo różnych osobowości i preferencji wszyscy posiadamy jedną wspólną rzecz, która nazywa się "Gemfile". Po przejrzeniu moich ostatnich kilku projektów zauważyłem, że kilka gemów powtarza się dla każdej z aplikacji. Chciałbym przedstawić Wam pięć gemów, które pokochacie.

Czytaj więcej
photo corner
Dostęp do Rails API z poziomu C++ [Część 2: Parsowanie formatu JSON]

W moim ostatnim wpisie stworzyłem prostą metodę GET. Teraz pokażę w jaki sposób przygotować Railsy do wysyłania odpowiedzi JSON po stronie serwera oraz w jaki sposób parsować je wewnątrz aplikacji C++.

Czytaj więcej
photo corner
Pięć stron, które pomogą Ci stać się lepszym programistą Ruby

Programowanie to nie tylko kwestia wykonywania swojej pracy. Ja widzę to jako nigdy nie kończące się zadanie w celu samodoskonalenia się. Musisz nadążyć nie tylko za wiadomościami odnośnie bezpieczeństwa, ale również trzeba poznawać różnorodne koncepcje i nowe rozwiązanie, które pomogą Ci stać się lepszym oraz lepiej rozumieć to co robisz. W dobie Internetu jest to prostsze niż kiedykolwiek. Można znaleźć wiele źródeł informacji - mniej lub bardziej wartościowych, ale każde z nich może dać dobre perspektywy albo pomysły do pracy. W niniejszym artykule przedstawiam pięć najlepszych według mnie miejsc do poszukiwania nowości w świecie Ruby.

Czytaj więcej