2011-09-18 28 views
5

Tôi muốn thêm tùy chọn onclick vào phương thức link_to để tải một hộp thoại phương thức ... tôi đang sử dụng phiên bản 2.3.8 và tôi đã tìm kiếm trên google và không thể thực hiện được. Plz có ai giúp tôi không?Thêm tùy chọn onclick vào phương thức link_to trong đường ray?

Phương thức link_to của tôi như sau.

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

Trả lời

6

Nếu bạn đang sử dụng 2.3.8, bạn không có: remote => true. Bạn cần sử dụng link_to_remote nếu bạn cố gắng thực hiện hành động ajax.

Vì vậy, nó sẽ giống như thế:

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

và phương pháp mới của bạn sẽ phải xử lý các yêu cầu ajax với một cái gì đó giống như

countries_controller.rb

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

CẬP NHẬT

Nếu bạn muốn onclick ngoài các hành động ajax, y ou chỉ có thể vượt qua nó vào các tùy chọn html:

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

Cảm ơn Chris. Tôi tải một phần nội dung vào div đó .. Nhưng tôi muốn tải hộp thoại phương thức. Tôi nên đặt mã đó ở đâu? Iam mới đến Rails và xin lỗi vì đã hỏi những thứ ngu xuẩn. – Rosh

+0

được cập nhật để bao gồm onclick với yêu cầu ajax –

0

Bạn có thể thêm video này vào liên kết:

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

Sau đó, JS của bạn hiển thị một cái gì đó ilke này:

<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> 
Các vấn đề liên quan