javascript - modal - ruby on rails assets
Rails 3-Estado del método "link_to_function" (3)
El ayudante link_to_function
ha sido desaprobado nuevamente en 3.2.4 .
El método en sí es bastante simple y bueno en algunos casos de uso cuando necesita llamar a una función javascript específica, etc. Puede agregar fácilmente su propio ayudante para lograr la misma funcionalidad. El siguiente código fue copiado de Jeremy en https://github.com/rails/rails/pull/5922#issuecomment-5770442
# /app/helpers/link_to_function_helper.rb
module LinkToFunctionHelper
def link_to_function(name, *args, &block)
html_options = args.extract_options!.symbolize_keys
function = block_given? ? update_page(&block) : args[0] || ''''
onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function}; return false;"
href = html_options[:href] || ''#''
content_tag(:a, name, html_options.merge(:href => href, :onclick => onclick))
end
end
Al buscar una solución a un problema de javascript, observé varios comentarios sobre la link_to_function
de link_to_function
en Rails 3. Sin embargo, he podido completar una sección de mi proyecto basado en Rails-3 utilizando link_to_function
. Funciona bien.
Al ser Rails nuevos, mi preocupación es que podría estar usando algo que no va a ser soportado a largo plazo o podría convertirse en un truco heredado. Al mirar api.rubyonrails.org, veo que link_to_function
se link_to_function
claramente en el módulo ActionView :: Helpers :: JavaScriptHelper como un método público compatible con Ruby on Rails v3.0.4. No hay advertencias u otras afirmaciones sobre la longevidad de la función.
¿Hay algún otro método / enfoque que deba usar en lugar de link_to_function
en Rails 3? ¿O está bien usar link_to_function
?
Gracias.
Si bien tengo la intención de cambiar todo a javascript discreto, un buen paso intermedio (para mí) fue reemplazar
link_to_function icon_tag(''close.png''), ''$(this).parent().hide()'', :title => t(''actions.close''), :class => ''close''
con lo siguiente:
link_to icon_tag(''close.png''), ''#'', :onclick => ''$(this).parent().hide()'', :title => t(''actions.close''), :class => ''close''
Muy simple. Espero que esto ayude.
[Actualizar]
Como menciona TomH, ahora está en desuso de nuevo en Rails 3.2.4
[Respuesta original]
link_to_function
ya no está en desuso y es seguro para su uso . Detalles:
link_to_function
fue programado para ser eliminado en Rails 3 (y fue por un tiempo cuando Rails 3 estaba en beta), pero la función fue puesta nuevamente en https://github.com/rails/rails/commit/d69e561 . Varias personas se preguntaron (en voz alta, en los comentarios de la confirmación) por qué se devolvió la función, cuando el gran impulso en Rails 3 fue para JavaScript no intrusivo , por lo que DHH intervino:
Esto es para manejar activadores de funciones no genéricas explícitamente en ERb cuando no está dispuesto a conectarlo manualmente a través de JS. La gran victoria para UJS en Rails 3 es deshacerse de grandes franjas de código repetitivo, como datos confirmados y datos remotos. Estos genéricos son automáticos y no tienes que preocuparte por ello.
Pero para sus propias funciones, ala link_to_function "Agregar calendario", "Calendar.add ()", esta es una manera más directa e inmediata de comenzar. Si aún así prefiere pasar por un JS externo y cablearlo a mano a través de dom: listo, tenga un día de campo.
El soporte para UJS en Rails 3 no se trata de ser dogmático. Al igual que el soporte para REST no es. Expondremos el mayor valor para todos y luego permitiremos que los establecimientos lo hagan desde entonces. Aquí, tiene sentido.
Esto, por cierto, no se trata de un prototipo o cualquier otro framework js específico.