2011-09-18 11 views
5

Voglio aggiungere un'opzione onclick per link_to metodo per caricare una finestra di dialogo modale ... sto usando la versione 2.3.8 di rails e ho cercato su google e non ho potuto farlo. Per favore, qualcuno mi aiuti?Aggiunta di un'opzione onclick per link_to metodo in rails?

Il mio metodo link_to come segue.

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

risposta

6

Se si utilizza 2.3.8, non si dispone di: remote => true. Devi usare link_to_remote se provi a fare un'azione ajax.

Quindi sarebbe qualcosa di simile:

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

e il vostro nuovo metodo avrebbe dovuto gestire la richiesta Ajax con qualcosa di simile

countries_controller.rb

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

AGGIORNATO

Se si desidera l'onclick in aggiunta all'azione Ajax, y ou può semplicemente passare in opzioni HTML:

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

Grazie Chris. . Carica il contenuto parziale in quel div .. Ma voglio caricare la finestra di dialogo modale. Dove dovrei inserire quel codice? Iam nuovo per i Rails e mi dispiace per aver chiesto cose folli. – Rosh

+0

aggiornato per includere l'onclick con la richiesta Ajax –

0

È possibile aggiungere questo al link:

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

Poi, il JS mostra qualcosa ilke questo:

<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>