Domanda

Rails 3 fa cose interessanti per rendere JavaScript discreto, quindi hanno fatto cose del genere:

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

.. Converte a

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

Ma mi è venuto in mente ... quando spengo JavaScript, il metodo non è più eliminato, è come previsto. Quindi ci sono piani per, o c'è un modo per consentirli data- Attributi per degradare con grazia, in modo che il link sia ancora una richiesta di eliminazione?

È stato utile?

Soluzione

Il cambiamento che hanno apportato in Rails 3 con questi data- Gli attributi non riguardavano il grazioso degrado, si trattava di JavaScript discreto.

In Rails 2, specificando :method => :delete Su un collegamento genererebbe un sacco di JavaScript in linea che creerebbe un modulo con un input nascosto e quindi inviare il modulo. È stato lo stesso di adesso: spegnere JavaScript e predefinito è una richiesta GET. Pertanto, supportare il caso di No JavaScript è lo stesso di prima.

Un'opzione è quella di utilizzare un modulo/pulsante anziché un collegamento in modo da poter includere il metodo come campo nascosto, proprio come fa i Rails 2 JavaScript. Un'altra opzione è quella di avere la versione GET portarti su una pagina intermedia che a sua volta ha il modulo/pulsante.

Il vantaggio del nuovo approccio è che è discreto. JavaScript per la modifica del verbo HTTP esiste in un file esterno e utilizza il data- attributi per determinare a quali elementi dovrebbe essere allegato.

Altri suggerimenti

Piuttosto che usare il link_to Metodo - che richiederebbe l'utilizzo di JavaScript per garantire che il metodo HTTP sia DELETE -- utilizzare il button_to metodo, che creerà un modulo con un elemento di input nascosto che dice alle Rails di trattare il metodo HTTP come DELETE piuttosto che POST. Se necessario, è quindi possibile utilizzare CSS per modellare il pulsante nel modulo in modo che sembri un collegamento.

L'unica possibilità che hai è definire una forma. Un link non può essere un post con _method = "elimina" senza javascript o per forma.

Non è possibile senza JavaScript.

Faccio un piccolo plug -in jQuery per la conversione data-method Attributo Link a pseudo moduli nascosti (utilizzati nel progetto Laravel per esempio).

Se vuoi usarlo: https://github.com/ifnot/restfulizerjs

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top