2010-02-12 12 views
24

Stavo solo giocando con la beta di Rails 3 e ho notato che link_to_function adesso non c'è più. Presumo che ci sia un metodo alternativo per ottenere lo stesso risultato (evento onclick?) Ma mi stavo chiedendo se c'è un modo più Rails-3 per farlo. TIA.In che punto la funzione link_to_function è scomparsa in Rails 3?

+2

Per chi trova questo tramite Google, si deve rilevare che link_to_function è allo stesso tempo in Rai ls 3 e NON deprecati. Vedi https: // github.com/rails/rails/commit/d69e561 Oppure la risposta qui: http://stackoverflow.com/questions/5063246/rails-3-status-of-link-to-function-method – noel

risposta

27

Rails 3 sembra aver eliminato Prototype Helper in favore di un approccio agnostico di libreria JS meno invasivo. L'obiettivo è eliminare tutto il javascript inline generato da Rails. Prototype Helper ha generato praticamente tutto il javascript.

Ora una qualsiasi delle varianti non remote di helper genererà il javascript appropriato per una chiamata remota nella libreria JS di scelta solo fornendo l'opzione: remote => true.

Sfortunatamente questo non vale per i metodi di funzione x. Per ora ci sono i prototype legacy helpers che non sono più una parte fondamentale di Rails.

È inoltre possibile utilizzare la chiamata come definita in ActionView :: Helpers :: PrototypeHelper :: JavascriptGenerator :: GeneratorMethods per fornire il codice javascript a: onclick come html_option per link_to, ma non è proprio carina.

Esempi:

Rails < 3      | Rails 3 
link_to_remote "target", url | link_to "target", url, :remote => true 
form_remote_for @post   | form_for @post, :remote => true 

ecc ....

O qualcosa in tal senso. Ho difficoltà a trovare documentazione ufficiale per eseguire il backup delle mie richieste. Quindi il release notes dovrà fare per ora.

Prima di poterlo utilizzare, è necessario includere i file di origine js corretti. Assicurati di caricare prototype.js e rails.js, o la libreria e il driver per il framework JS di scelta al loro posto.

Ricorda, Rails 3 è ora in versione beta. Ma questo non significa che sia fatto. Onestamente non ho idea di come verrà sostituita la funzione link_to_function. Va contro l'ideale di javascript non invadente.

+0

La domanda riguardava link_to_function (es. chiama javascript direttamente e senza la roba UJS). Grazie comunque per le informazioni. – Psynix

+0

Ho perso la "funzione" quando l'ho scritto. Ho aggiornato la soluzione con una risposta migliore alla domanda specifica. – EmFi

8

Per rispondere alla mia domanda, sembra che questo funziona ed è sufficiente per quello che mi serve:

link_to "name", nil, :onlick => "alert('Hello, world!')" 
+9

il problema con questa soluzione è assolutamente invadente. Ti raccomando di giocare con jquery o prototipo + low pro. –

+1

Non penso che questo sia "totalmente" invadente, basta chiamare un gestore da onclick = "" invece di implementarlo proprio lì. L'intera roba UJS non è ancora matura e anche i suoi creatori non sono d'accordo su ciò che è raccomandato (vedi http://weblog.jamisbuck.org/2010/3/2/unobtrusive-yet-explicit compresi i commenti). – Matt

0

link_to_remote può essere fatto in questo modo

link_to "target",: a distanza => true

e di fare un post ajax/ottenere avete

link_to "target", {: regolatore => controller: action => metodo,}: distanza => true

In rotaie 2 è stato così

link_to_remote "target ": url => {: Controller => Controller,: action => metodo,},: ritirato => true