2010-02-12 8 views
24

Estaba jugando con Rails 3 beta y noté que link_to_function ya no está. Supongo que hay un método alternativo para lograr el mismo resultado (¿evento onclick?), Pero me preguntaba si hay una forma más de hacerlo de Rails-3. TIA.¿A dónde desapareció link_to_function en Rails 3?

+2

Para cualquier persona que encuentre esto a través de Google, hay que señalar que link_to_function es a la vez en Rai ls 3 y NO desaprobado. Ver https: // github.com/rails/rails/commit/d69e561 O la respuesta aquí: http://stackoverflow.com/questions/5063246/rails-3-status-of-link-to-function-method – noel

Respuesta

27

Rails 3 parece haber acabado con Prototype Helper a favor de un enfoque agnóstico menos obtrusivo/biblioteca JS. El objetivo es eliminar todo el javascript en línea generado por Rails. Prototype Helper generó casi todo el javascript.

Ahora, cualquiera de las variantes no remotas de helpers generará el javascript adecuado para una llamada remota en la biblioteca JS que elijas simplemente con la opción: remote => true.

Desafortunadamente, esto no es válido para los métodos de función x. Por el momento, están los prototype legacy helpers que ya no son una parte fundamental de Rails.

También podría utilizar la llamada como se define en ActionView :: Helpers :: PrototypeHelper :: JavascriptGenerator :: GeneratorMethods para proporcionar el código de JavaScript a: onclick como una opción html para link_to, pero eso no es exactamente bonito.

Ejemplos:

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

etc ....

O algo por el estilo. Tengo problemas para encontrar documentación oficial para respaldar mis reclamos. Entonces, el release notes tendrá que hacer por ahora.

Antes de que pueda usarlo, deberá incluir los archivos fuente js adecuados. Asegúrese de que está cargando prototype.js y rails.js, o la biblioteca y el controlador para el marco JS de su elección en su lugar.

Recuerde, Rails 3 está en versión beta ahora. Pero eso no significa que esté hecho. Sinceramente, no tengo idea de cómo se reemplazará link_to_function. Va en contra del ideal de JavaScript no intrusivo.

+0

La pregunta era sobre link_to_function (es decir. llamar a javascript directamente y sin las cosas de UJS). Gracias por la información de todos modos. – Psynix

+0

Me perdí la "función" cuando escribí eso. Actualicé la solución con una mejor respuesta a la pregunta específica. – EmFi

8

para responder a mi propia pregunta, parece que esto funciona y es suficiente para lo que necesito:

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

el problema con esa solución es que es totalmente molesto. Te recomiendo que juegues con jquery o prototype + low pro. –

+1

No creo que esto sea "totalmente" molesto, siempre y cuando solo llame a un controlador desde onclick = "" en lugar de implementarlo allí mismo. Todo el material de UJS aún no está maduro e incluso sus creadores no están de acuerdo con lo que se recomienda (ver http://weblog.jamisbuck.org/2010/3/2/unobtrusive-yet-explicit incluyendo comentarios). – Matt

0

link_to_remote se puede hacer como esto

link_to "objetivo",: distancia => true

y hacer un post ajax/get tiene

link_to "objetivo", {: controller => controlador,: action => método,}: distancia => true

En los carriles 2 era como este link_to_remote

"target ", url => {: controlador => controlador,: action => método,}: retirado => true