Status of Rails' link_to_function deprecation?

后端 未结 3 1203
南旧
南旧 2020-12-09 09:25

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

相关标签:
3条回答
  • 2020-12-09 09:47

    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"
    
    0 讨论(0)
  • 2020-12-09 09:59

    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

    0 讨论(0)
  • 2020-12-09 10:01

    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);
        }
      });
    })
    
    0 讨论(0)
提交回复
热议问题