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, th
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"
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
Building on Elias Baixas answer... I had to change it a bit to get it to work if this helps anyone... I had to add eval
and preventDefault
(I'm pretty terrible at JS fwiw)
link_to fa_icon('info-circle'),
'#',
data: {
on: :click,
call: 'channel_info',
args: Array('some data').to_json
}
function channel_info(a){
console.log(a)
}
//clean implementation of link_to_function
$(function(){
$('[data-on][data-call][data-args]').each(function(d){
try{
$(this).on( $(this).data('on'), function(event){
console.log($(this).data('args'));
window[$(this).data('call')].apply(window,eval($(this).data('args')));
event.preventDefault();
})
} catch(e) {
if(typeof(console) != 'undefined' && typeof(console.log === 'function'))
console.log(e);
}
});
})