Kolejny problem z Ajaxem typu: try { Element.update

Witam,

Męczę się już pięć godzin i padam.

Mam następujący problem.

Railsy powinny wykonać akcję która podmieni treść div’a. nie stety zamiast tego dostaję komunikat:

try { Element.update("myDivIDtoReplace", "\n\t\t\t<tr>\n\t\t\t\t<td>\.... } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.update(\"myDivIDtoReplace\", \t);'); throw e }
Przetrzepałem pół internetu
OnRails.pl 1
OnRails.pl 2
OnRails.pl 3
OnRails.pl 4
railsforum.com 1

W końcu się poddałem.
Używam Rails 3.0.7 które domyślnie korzystają z JQuery, i pewnie dletego, mój plik rjs:

page.replace_html 'myDivIDtoReplace', :partial => 'partialView', :object => @objectToReplace

nie działa jak należy. (proszę o ew. potwierdzenie tej teorii).

Czy ma ktoś jakiś zjadliwy tutorial jak teraz zastąpić div po bożemu w rails’ach 3?
Googlowałem trochę i nic godnego polecenia nie znalzałem.

APO Generalnie mam odczucie że rezygnacja z prototype to był krok w przeciwną stronę od CoC. :confused:

A jak wygląda link/formularz wywołujący tą akcje ?

Nie lepiej pisać w jQuery? Ajax i podmiana to kilka linijek. Super szczegółowo opisane w pomocy do jQuery.

Mylisz tutaj kilka rzeczy. Po pierwsze w 3.07 nie został usunięty prototype, tutaj masz domyślne pliki w tej wersji railsów: https://github.com/rails/rails/tree/3-0-7/railties/lib/rails/generators/rails/app/templates/public/javascripts

jQuery zostało użyte jako domyślna opcja, ale nikt Ci nie każe tej biblioteki używać. Nawet w 3.1 możesz po prostu wygenerować aplikację używając rails new -J prototype

Druga rzecz tutaj jest taka, że używasz RJS, które okazały się średnim pomysłem, przez co railsy się z tego wycofują. Ale dalej, w 3.0.7 one powinny działać, tylko domyślnie nie z jquery.

Sprawdź najlepiej której biblioteki rzeczywiście używasz. Jeżeli jQuery, to RJS bez żadnych dodatkowych pluginów raczej nie mają prawa działać. Jeżeli prototype, to powinny działać. Wkleiłeś w swoim poście jakiś komunikat, w jaki sposób go “dostajesz”? Mi to wygląda jak Javascript wygenerowany przez RJSa, więc albo rzeczywiście używasz jQuery, albo request ajaxowy prosi o HTMLa zamiast o javascripta. Przydałoby się też to o co prosi Paweł - może masz jakiś błąd w kodzie formularza

I warto byłoby też rozważyć propozycję gotara i użyć czystego javascriptu. Jeżeli używasz jQuery, to może to wyglądać tak:

// plik .js.erb $('#myDivIDtoReplace').replaceWith(<%= render(:partial => 'partialView', :object => @objectToReplace).to_json %>);
Dzięki temu nie używasz żadnych nakładek tylko bezpośrednio używasz javascripta.

O tej opcji z rails new -J prototype
nie pomyślałem. Dzięki za hint.

Nie stety całość projektu wykorzystuje JQuery, także raczej się nie przerzucimy na prototype.

Po napisaniu postu, udało mi się dokopać do tego:
[link]https://github.com/edgarjs/ajaxful-rating/wiki/Rails-3-View-Update-with-jQuery[/link]
ale nie do końca złapałem o co c’mon z tą funkcją. Twój przykład jest znacznie prostrzy(czyt. genialniejszy).

A przy okazji wytłumaczę się z laickiej opinii którą mi wypersfadowaliście :stuck_out_tongue:
Otóż dopiero poznaję język i spotkałem kilka tutków z użyciem właśnie prototype (jako domyślnej biblioteki), gdzie są same ocho achy jakie to super. A potem okazuje się że to już nie są domyślne ustawienia itp. : P i człowiek zaczyna tęsknić wtedy za tamtym : (

Ale dzięki za hint. Na pewno skorzystam! :slight_smile:

Musiałeś jakieś starutkie artykuły wyszukać :wink: Patrz zawsze na datę i jeżeli są starsze niż ok. rok i nie jesteś pewien czy są aktualne, to lepiej podchodź z dużą dozą sceptycyzmu.

Otóż obecnie nie wywołuje mi w ogóle JS’a z szablonu js.erb.

Możecie mi polecić jakiś dobry tutorial do zrobienia AJAX’owego formularza w rails 3?

W pliku:
partialView.js.erb
mimo jednej krótkiej liniki kodu, edytor (aptana plugin do eclipsa) pokazuje mi bład:

",unexpected null"

Kontroler:

def renderUserView @someone = User.find_by_someone_id(params[:id]) if (@someone.nil?) render 'ups' else @objectToReplace = filter(params[:day], @someone) end end
Formularz który wywołuje akcje:

[code]

Nazwisko: <%= form_tag(:action=>'renderUserView', :remote => true) do %> <%= text_field_tag (:XYZ), params[:XYZ], :onchange => raw("this.form.submit();") %> <% submit_tag :OK %> <% end %>
[/code] partialView.html.erb [code][/code] partialView.js.erb [code]$('#myDivIDtoReplace').replaceWith(aaa);[/code] Muszę dodać html.erb gdyż inaczej mówi do mnie że nie mam formularza częściowego. daję go pustego. Ale mimo to, nawet nie podmienia na AAA. myDivIDtoReplace znajduje się w widoku z katalogu LAYOUT.

p.s. Google nie zaserwował nic porządnego pod hasłami: Rails 3 Ajax form. : /

Znalazłem jeden błąd:
W formularzu należało zmienić z:

<%= form_tag(:action=>'renderUserView', :remote => true) do %>

na:

<%= form_tag ({:action=>'changePlan'}), :remote => true do %>

Teraz w htmlu poprawnie jest data-remote=true.

tylko że wciąż przeładowuje całą stronę i czyta js’a tylko jeśli dodam go w znacznika szablonu: html.erb.

by zrobić formularz w js (jQuery) w sumie wystarczy jquery form i tyle

http://jquery.malsup.com/form/

Najzwyklejszy formularz w rails + ten plugin