Rails Upgrade auf 3.1 - Ändern der Ajax-Behandlung von "render: update" zu respond_to

8

Ich aktualisiere eine alte Schienen App auf 3.1. Die App funktioniert ziemlich gut, aber ich habe einige Ajax-Funktionen, die ich aktualisieren muss. (Wenn es einen Unterschied macht, verwende ich jQuery und coffeescript)

Die gesamte vorhandene Ajax-Funktionalität wurde mit render: updates geschrieben. zB

%Vor%

Ich denke, der neue bevorzugte Weg, dies zu tun, ist eine Antwort zu verwenden? blockieren, um die js zu behandeln, aber ich bin nicht sicher über den besten Weg, diese verschiedenen Fälle zu behandeln.

Für den ersten Fall (die page.remove ) denke ich mit der Asset-Pipe-Zeile, sollte ich eine externe js in / app / assets / javascripts / haben, um die JavaScript-Seite (zB die page.remove) zu behandeln, aber ich ' Ich bin nicht sicher, wie die Parameter an die js-Datei übergeben werden. Ich schätze, Sie können etwas tun wie:

%Vor%

aber ich bin nicht sicher, wie Sie das aus der js-Datei herausholen könnten. Ist das der richtige Weg, Informationen an die js weiterzugeben? Oder gibt es eine andere Methode, die ich verwenden sollte?

Für den zweiten Fall ( page.replace_html ) glaube ich, dass dies von 3.1 veraltet / entfernt wurde (laut apidock ). Ich vermute wieder, dass dies die js-Datei im Verzeichnis app / assets / javascript verwenden sollte, aber ich bin mir nicht sicher, wie ich das partielle Rendern durchführen und diese Informationen in die js-Datei übertragen sollte.

Danke für irgendwelche Hinweise in diesem Bereich =)

    
Dave Smylie 26.01.2012, 21:06
quelle

1 Antwort

31

Verwenden Sie jQuery in Verbindung mit js.erb views und respond_to blocks.

Was auch immer diese Aktion ist (wir sagen FoosController#update aus Gründen des Beispiels):

%Vor%

würde werden:

%Vor%

mit einer View-Datei update.js.erb :

%Vor%

update.js.erb wird von ERb analysiert, als JS gerendert, über Ajax zurück an den Client gesendet und ausgewertet.

Sie können an diese JS-Vorlagen alles weitergeben, was Sie möchten. Immerhin sind es ERb-Dateien. Verwenden Sie <%= %> und Instanzvariablen wie bei HTML / ERb-Ansichten. Wenn Sie render in Ihren JS / ERb-Sichten aufrufen, umschließen Sie sie mit escape_javascript , damit HTML korrekt gerendert wird.

render :update ruft alte JavaScriptGenerator Hilfsmethoden für Prototype auf. Die Konvertierung in jQuery ist ziemlich einfach, da beide dasselbe tun: Wählen Sie ein DOM-Element und manipulieren Sie es.

Hier ist eine nette kleine Übersetzungstabelle mit typischen Manipulationen. Entfernen Sie die Prototyp-Hilfsmethoden vom Controller und platzieren Sie ihr jQuery- oder JS-Gegenstück in einer entsprechenden JS / ERb-Ansicht:

%Vor%

Vergessen Sie nicht Ihre Semikola in jeder Zeile!

    
Substantial 29.01.2012, 13:46
quelle