2011-08-13 17 views
16

Próbuję zrobić link "Użytkownicy" na indeksie mojej strony rails, tak aby pokazywał zarejestrowanych użytkowników (User.all), ALE chcę, żeby to pojawiło się w prawej części strony, jako częściowe, w div bez ładowania całej strony od początku.link_to and remote => true + jquery: Jak? Wsparcie?

Wiedziałem, że było to możliwe ze starym prototypem i zdalnym => true , ale z Rails 3.1 i jQuery (i zasobami) nie mam pojęcia, jak to zrobić.

Czy ktoś może mi pomóc lub wskazać drogę do samouczka?

Odpowiedz

46

Jest to całkiem proste, to po prostu czuje się jak wielka sprawa, ponieważ jest nowy . Zasadniczo, z nowym dyskretny obsługuje JavaScript, szyny ujs skrypt naraża zbiór zdarzeń można przypisywać funkcji javascript do, są to:

  1. ajax: beforeSend - zwolniony przed wyślij występuje
  2. ajax: sukces - zwolniony po wystąpieniu wyślij zawiera odpowiedzi
  3. ajax: kompletne - zwolniony po wypadku sukcesu
  4. ajax: błąd - zwolniony, gdy występują błędy

wszystko co musisz zrobić, to napisać funk n (który zawijasz w $ document.ready), który z kolei wiąże niektóre anonimowe funkcje z każdym z tych zdarzeń lub tylko z wydarzeniami, którymi jesteś zainteresowany.

Załóżmy na przykład, że masz div, który chcesz umieścić dane odpowiedzi z identyfikatorem "response_data" i masz link z identyfikatorem "ajax_trigger". Coś takiego:

<%= link_to "My Link", some_model_path(@model_instance), 
         :remote => true, :html => {:id => "ajax_trigger"} %> 
<div id="response_data"> 
</div> 

Wszystko, co musisz zrobić, to zapewnić funkcję jak ten poniżej, aby umieścić odpowiedź od serwera do div:

$(document).ready(
    function(){ 
      $("a#ajax_trigger").bind("ajax:success", 
        function(evt, data, status, xhr){ 
         //this assumes the action returns an HTML snippet 
         $("div#response_data").html(data); 
      }).bind("ajax:error", function(evt, data, status, xhr){ 
        //do something with the error here 
        $("div#errors p").text(data); 
      }); 
}); 

Naprawdę, wszystko robisz z javascriptem zajmuje się odpowiedzią, gdy wraca z serwera. Naprawdę nie musisz robić nic specjalnego, aby zainicjować żądanie XHR, a także możesz bezpiecznie przechowywać tę metodę w pliku .js, który zostanie udostępniony jako zasób statyczny. Jeśli używasz Rails 3.1, powinieneś umieścić go w odpowiednio nazwanym pliku javascript, który odpowiada kontrolerowi. W kontrolerze należy się upewnić, że określono: layout => false w metodzie responds_with(), w ten sposób sterownik zwraca część lub szablon, który renderuje, a nie całą stronę. Ta konfiguracja działa również w przypadku akcji, które zwracają javascript do wykonania przez klienta, a także JSON, w zależności od typu danych określonego w żądaniu.

Znalazłem ten blogu, aby być bardzo pomocne: http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

+0

Szczerze mówiąc, "Rails way" jest tak skomplikowany, że po prostu idę na czystą jQuery =) –

+0

Bardzo dobrze wyjaśnione. A to jest ratownik. –