Frage

Rails 3 macht ein paar coole Sachen, um JavaScript unauffällig zu machen, also haben sie solche Dinge getan:

= link_to "Logout", user_session_path, :method => :delete

..converts to

<a href="/logout" data-method="delete" rel="nofollow">Logout</a>

Aber es ist mir einfach in den Sinn gekommen. Wenn ich JavaScript ausschalte, wird die Methode nicht mehr gelöscht, sondern wie erwartet. Also gibt es Pläne oder gibt es eine Möglichkeit, diese zuzulassen data- Attribute, die sich anmutig verschlechtern können, so dass Link noch eine Löschanforderung ist?

War es hilfreich?

Lösung

Die Änderung, die sie in Rails 3 mit diesen vorgenommen haben data- Attribute ging es nicht um einen anmutigen Abbau, sondern um unauffälliges JavaScript.

In Schienen 2 angeben :method => :delete Auf einem Link würde eine ganze Reihe von Inline -JavaScript generieren, die ein Formular mit einer versteckten Eingabe erstellen und dann das Formular einreichen. Das war das gleiche wie jetzt: Schalten Sie JavaScript aus und es ist standardmäßig, um eine Get -Anfrage zu erhalten. Die Unterstützung des Falls ohne JavaScript ist daher der gleiche wie zuvor.

Eine Option besteht darin, ein Formular/eine Schaltfläche anstelle eines Links zu verwenden, damit Sie die Methode als verstecktes Feld einfügen können, ähnlich wie das Rails 2 JavaScript. Eine andere Möglichkeit besteht darin, dass Sie die Get -Version zu einer Zwischenseite bringen, die wiederum das Formular/die Schaltfläche enthält.

Der Vorteil des neuen Ansatzes besteht darin, dass er unauffällig ist. Das JavaScript zum Ändern des HTTP -Verbs existiert in einer externen Datei und verwendet die data- Attribute, um zu bestimmen, an welchen Elementen sie beigefügt werden sollten.

Andere Tipps

Anstatt die zu verwenden link_to Methode - für die Sie JavaScript verwenden müssen, um sicherzustellen, dass die HTTP -Methode ist DELETE - Verwenden Sie die button_to Methode, die ein Formular mit einem versteckten Eingangselement erzeugt, das Rails anweist, die HTTP -Methode als zu behandeln DELETE statt POST. Bei Bedarf können Sie dann CSS verwenden, um die Schaltfläche im Formular so zu stylen, dass er wie ein Link aussieht.

Die einzige Chance, die Sie haben, ist eine Form zu definieren. Ein Link kann kein Beitrag mit _method = "delete" ohne JavaScript oder nach Form sein.

Ohne JavaScript ist es nicht möglich.

Ich mache ein kleines Jquery -Plugin zum Konvertieren data-method Linkattribut mit pseudo versteckten Formen (zum Beispiel im Laravel -Projekt verwendet).

Wenn Sie es verwenden möchten: https://github.com/ifnot/restfulizerjs

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top