Status of Rails' link_to_function deprecation?
Solution 1
link_to_function
is NOT deprecated in 3-2-stable
branch and it won't be deprecated in 3-2-stable
in future. But it IS depreacated in current master branch and will be deprecated in Rails 4.0 when it releases. So I guess it will removed from rails code in 4.1.
So you can teach students to do this (from the rails 4 changelog):
We recommend the use of Unobtrusive JavaScript instead. For example:
link_to "Greeting", "#", class: "nav_link"
$(function() {
$('.nav_link').click(function() {
// Some complex code
return false;
});
});
or
link_to "Greeting", '#', onclick: "alert('Hello world!'); return false", class: "nav_link"
Solution 2
This is my solution to this problem:
in javascript:
// define function to be called
function awesome_func(a,b,c){
console.log(a,b,c);
}
//clean implementation of link_to_function
$(function(){
$('[data-on][data-call][data-args]').each(function(d){
try{
$(this).on( $(this).data('on'), function(){
window[$(this).data('call')].apply(window,$(this).data('args'))})
}catch(e){
if(typeof(console) != 'undefined' && typeof(console.log === 'function'))
console.log(e);
}
});
})
Then you can do in rails:
link_to 'Awesome Button', '#', data:{on: :click, call: 'awesome_func',args: '[1,"yeah",{b:4}]'
this seems the way they want us to code :), i liked link_to_function, though
at.
Updated on July 09, 2022Comments
-
at. almost 2 years
What is the status of the
link_to_function
Javascript helper in Rails? I read, including in this stackoverflow question, that it was deprecated in Rails 3.0, then undeprecated, then deprecated again in 3.2.4. Is it something I can depend on and teach students? I just read the release notes (from a search) for Rails 3.2.8:Reverted the deprecation of button_to_function and link_to_function helpers. Rafael Mendonça França
Where does this stand now?
-
Btuman almost 11 yearsHow would this refactor look when link_to_function is used in a helper?
-
pwz2000 over 9 years@Btuman Did you find a solution for this? I upgraded Rails and link_to_function is deprecated and I'm not sure how to do the unobtrusive js for it.
-
Btuman over 9 yearsI think I did, alas, I no longer have access to the code. basically had to redo it from scratch. (The depreciation of this helper function drove me nuts)
-
Hovo over 9 yearsThis reloads the page after the javascript. Adding <code>remote: true</code> stops the client refreshing but it still sends a request to the server.. Is there anyway of stoping the request all together?
-
jpw over 8 yearsExcellent solution, should be the (new) accepted answer IMO. One note the first function can be on the page, the second function needs to be invoked after jquery is loaded so on the layout,
-
Elias Baixas over 7 yearsYou have to be aware of some security issues though: if you have some kind of wysiwyg (tinymce or fckeditor) you would need to always remove data-on, data-click and data-args on user provided div elements.