2011-09-18 17 views
5

Quiero agregar una opción onclick al método link_to para cargar un cuadro de diálogo modal ... estoy usando la versión 2.3.8 de los rieles y busqué en google y no pude hacerlo. Por favor, ¿alguien me ayuda?¿Agregar una opción onclick al método link_to en rieles?

Mi método link_to de la siguiente manera.

<%= link_to 'All countries',{:controller=>'countries', :action=>'new'}, :remote => true %> 

Respuesta

6

Si está utilizando 2.3.8, no tiene: remote => true. Necesitas usar link_to_remote si intentas hacer una acción ajax.

Por lo tanto, sería algo como:

<%= link_to_remote 'All countries', :url => {:controller => 'countries', :action => 'new'}%> 
<div id="populate_me"></div> 

y su nuevo método tendría que manejar la petición ajax con algo como

countries_controller.rb

def new 
    <do something> 
    render :update do |page| 
    page.replace_html 'populate_me', :partial => 'whatever' 
    end 
end 

ACTUALIZADO

Si desea el onclick además de la acción ajax, y ou solo puede pasar en las opciones de HTML:

<%= link_to_remote 'All countries', :url => {:controller => 'countries', :action => 'new'}, :html => {:onclick => 'alert("some javascript executed before ajax")'} %> 
+0

Gracias Chris. Cardo contenido parcial en ese div. Pero quiero cargar el cuadro de diálogo modal. ¿Dónde debería poner ese código? Soy nuevo en The Rails y lo siento por preguntar tonterías. – Rosh

+0

actualizado para incluir el onclick con la solicitud de ajax –

0

Puede añadir esto a la relación:

, :class => "pop light", :id => "modal_link" 

Entonces, el JS muestra algo ilke esto:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('a.poplight[href^=#]').click(function() { 
     var popID = $(this).attr('rel'); //Get Popup Name 
     var popURL = $(this).attr('href'); //Get Popup href to define size 
     var query= popURL.split('?'); 
     var dim= query[1].split('&'); 
     var popWidth = dim[0].split('=')[1]; //Gets the first query string value 
     $('#' + popID).fadeIn().css({ 'width': Number(popWidth) }).prepend('<a href="#" class="close"></a>'); 
     $('a.close').hide(); 
     var popMargTop = ($('#' + popID).height() + 80)/2; 
     var popMargLeft = ($('#' + popID).width() + 80)/2; 
     $('#' + popID).css({ 
      'margin-top' : -popMargTop, 
      'margin-left' : -popMargLeft 
     }); 
     $('body').append('<div id="fade"></div>'); 
     $('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn(); 
     return false; 
     }); 
     $('a.close').live('click', function() { 
      $('#fade , .popup_block').fadeOut(function() { 
      $('#fade, a.close').remove(); 
      }); 
      return false; 
     });   
     $('#modal_link').click(); 
    }); 
    </script> 
Cuestiones relacionadas