Link_to_remote mit RJS und Fallback

Hallo Leute,

erste RJS Schritte:

Ich iteriere in einer View über mehrere articles …

<%= link_to_remote “Weitere Informationen”, :update => “link_section_#
{article.id}”, :url => { :action => “show_info”, :id => article.id } %>

und habe in dieser View die passenden Ziel div’s:

&nbsp

Im Controller definiere ich:

def show_info
@press_article = Press.find(params[:id])
respond_to do |format|
format.html { redirect_to :action => “show_html_info”, :id =>
params[:id]}
format.js
end
end

Wobei show_html_info die Fallback Situation sein soll, wenn
Javascript nicht da ist, und dann ein show_info.rjs:

@article = Press.find(params[:id])
#page.insert_html :bottom, “link_section_#{params[:id]}”, :partial =>
“link”, :locals => {:article => @article}
page.insert_html :bottom, “link_section_#{params[:id]}”, “foobar
page[“link_section_#{params[:id]}”].visual_effect(:highlight)

Ergebnis: In meinem Zieldiv landet das hier:

try { new Insertion.Bottom(“link_section_1”, “foobar”); $
(“link_section_1”).visualEffect(“highlight”); } catch (e) { alert
(‘RJS error:\n\n’ + e.toString()); alert(‘new Insertion.Bottom
(“link_section_1”, “foobar”);\n$(“link_section_1”).visualEffect
(“hightlight”);’); throw e }

und der Fallback funktioniert auch nicht. Nachdem ich Ryan’s Casts
43, 44 und 45 gesehen hatte, hoffte ich, mein link_to durch ein
link_to_remote zu ersetzen, wie er den form_for durch form_remote_for.

Was mache ich falsch? Hat jemand einen Tip?

Jan R.
[email protected]

Sers, Jan!

<%= link_to_remote “Weitere Informationen”, :update => “link_section_#
{article.id}”, :url => { :action => “show_info”, :id => article.id } %>
[…]
Ergebnis: In meinem Zieldiv landet das hier:
try { new Insertion.Bottom(“link_section_1”, “foobar”); $ […]

So ganz sicher bin ich nicht, aber du hast in deinem link_to_remote den
Parameter :update angegeben. Ich glaube, wenn der angegeben ist, wird
das Ergebnis wohl nicht als JavaScript interpretiert, sondern direkt in
das div mit der mit :update angegebenen id gespielt.
Lass das mal weg.

Gruesse, Rainer

Hi Rainer,

So ganz sicher bin ich nicht, aber du hast in deinem link_to_remote
den
Parameter :update angegeben. Ich glaube, wenn der angegeben ist, wird
das Ergebnis wohl nicht als JavaScript interpretiert, sondern
direkt in
das div mit der mit :update angegebenen id gespielt.
Lass das mal weg.

“brett vorm Kopf wegwerf” … klar. Danke! Damit funktioniert das
Update jetzt wunderbar. Aber der Fallback für den Fall das JS nicht
da ist, leider nicht, da ist irgendwie noch ein Denkfehler drin.

Gute Nacht.

Grüsse
Jan

Jan R.
[email protected]

Sers, Jan!

[…] Aber der Fallback für den Fall das JS nicht
da ist, leider nicht, da ist irgendwie noch ein Denkfehler drin.

Dann mal in die Doku schauen:
http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M000533

Hmm, da steht nicht wirklich was dazu, aber wenn ich mir den Aufruf
ansehe (link_to_remote(name, options = {}, html_options = {})), da
kannst du html_options definieren, das hier sollte also funktionieren:

link_to_remote ‘bla’, { :url => js_path() }, { :href => alt_path() }

Gruesse, Rainer

P.S.: By the way, super Hilfe, um die Doku zu durchsuchen:
http://start.gotapi.com/

Hi Rainer,

link_to_remote ‘bla’, { :url => js_path() }, { :href => alt_path() }

<%= link_to_remote ‘Weitere Informationen’, { :url => { :action =>
‘show_info’, :id => article.id } }, { :href => url_for({ :action =>
‘show_info’, :id => article.id }) } %>

hat es dann in meinem Fall rausgerissen, nur gefiel mir die duplication
nicht. Wen’s interessiert, der findet dazu eine schöne Lösung hier:

http://blog.codefront.net/2007/03/24/drying-up-link_to_remote-for-degradable-urls/

Grüsse und Dank


Jan Rösner
[email protected]