2010-02-12 10 views
24

Po prostu bawiłem się wersją beta Rails 3 i zauważyłem, że funkcja łączenia z linkiem już nie istnieje. Zakładam, że istnieje alternatywna metoda osiągnięcia tego samego wyniku (zdarzenie onclick?), Ale zastanawiałem się, czy istnieje więcej sposobów Rails-3. TIA.Skąd link_to_funkcja zniknął w Rails 3?

+2

Dla każdego, kto uważa, że ​​to za pośrednictwem Google, należy zauważyć, że link_to_function jest zarówno w Rai ls 3 i NIE są przestarzałe. Zobacz https: // github.com/rails/rails/commit/d69e561 Lub odpowiedź tutaj: http://stackoverflow.com/questions/5063246/rails-3-status-of-link-to-function-method – noel

Odpowiedz

27

Wydaje się, że szyny 3 zlikwidowały prototypowy helper na rzecz mniej agresywnego podejścia do biblioteki. Celem jest wyeliminowanie wszystkich wbudowanych javascript generowanych przez Rails. Prototype Helper wygenerował prawie wszystkie javascript.

Teraz dowolny z niezespolonych wariantów pomocy wygeneruje odpowiedni javascript dla połączenia zdalnego w wybranej bibliotece JS, po prostu przez podanie opcji: remote => true.

Niestety nie jest to prawdą dla metod x do funkcji. Na razie są prototype legacy helpers, które nie są już podstawową częścią Rails.

Można również użyć wywołania zdefiniowanego w ActionView :: Helpers :: PrototypeHelper :: JavascriptGenerator :: GeneratorMethods do dostarczania kodu javascript do: onclick jako html_option dla łącza_to, ale to nie jest całkiem ładne.

Przykłady:

Rails < 3      | Rails 3 
link_to_remote "target", url | link_to "target", url, :remote => true 
form_remote_for @post   | form_for @post, :remote => true 

itp ....

Albo coś w tym rodzaju. Mam problem ze znalezieniem oficjalnej dokumentacji, aby zarchiwizować moje roszczenia. Tak więc na razie konieczne będzie wykonanie release notes.

zanim będzie można go używać, musisz włączyć odpowiednie pliki źródłowe JS. Upewnij się, że ładujesz prototype.js i rails.js, lub bibliotekę i sterownik dla wybranego przez siebie środowiska JS.

Pamiętaj, że Rails 3 jest już w wersji beta. Ale to nie znaczy, że to się stało. Szczerze mówiąc nie mam pojęcia, jak zostanie zastąpiona funkcja link_to_function. Jest to sprzeczne z ideałem dyskretnego javascript.

+0

Pytanie dotyczyło funkcji link_to_ (tj. wywołać javascript bezpośrednio i bez rzeczy UJS). Dzięki za informacje. – Psynix

+0

Brakowało mi "funkcji", kiedy to napisałem. Zaktualizowałem rozwiązanie, by uzyskać lepszą odpowiedź na konkretne pytanie. – EmFi

8

Aby odpowiedzieć na moje własne pytanie, wydaje się to działa i jest wystarczająca do tego, co potrzebne:

link_to "name", nil, :onlick => "alert('Hello, world!')" 
+9

Problem z tym rozwiązaniem polega na tym, że jest on całkowicie natarczywy. Polecam grać z jquery lub prototypem + low pro. –

+1

Nie sądzę, że jest to "całkowicie" natrętne, o ile tylko wywołasz procedurę obsługi z onclick = "" zamiast implementować ją właśnie tam. Cały materiał UJS nie jest jeszcze dojrzały, a nawet jego twórcy nie zgadzają się z tym, co jest zalecane (zobacz http://weblog.jamisbuck.org/2010/3/2/unobtrusive-yet-exetal zawierający komentarze). – Matt

0

link_to_remote można zrobić jak ten

link_to "target", remote => true

i zrobić post ajax/dostać trzeba

link_to "docelowej" {: kontroler => kontroler: Działanie => Metoda,}: oddalone => prawda

w szynach 2 tak było

link_to_remote „docelowy ”,: url => {: controller => regulator,: action => metoda,}: zdalne => true