render partial on click

2019-02-01 02:50发布

I would like to call partials on some standard operations. I am using this method for calling the partial:

 %li= link_to 'Delete Event', 'javascript:void(0);', :class => 'alert tiny button', :data => {'reveal-id' => :RevealDelete}
= render 'layouts/reveal_delete', :item => event_display(@event.event), :resource => @event

Then in my partial,

#RevealDelete.reveal-modal


 %a.close-reveal-modal ×
  %h3= "Delete #{item}"
  %p Are you sure you want to delete this?
  =link_to "Delete #{item}", resource, :method => :delete, :remote => :true, :confirm => resource, :class => 'button close-reveal-modal'
  %a.button.alert.close-reveal-modal Cancel

How can I have this has as something like:

link_to 'Delete', '#', :partial => 'layouts/delete', :remote => :true? 

so that I only render that partial when clicked and not when the page loads?

3条回答
淡お忘
2楼-- · 2019-02-01 03:09

You can do that with javascript like:

<%= link_to "Delete", delete_content_path, :remote => true %>

The action in your corresponding controller then will be this:

My Controller:

def delete_content
  respond_to do |format|               
    format.js
  end        
end 

Then you can create the delete_content.js.erb inside your correct directory of the link and there you put the following code:

delete_content.js.erb

$('#div_id').html("<%= render :partial => 'my_partial' %>");

Then in your view:

delete_content.html.erb

<div id = "div_id">
#this div is html div that will render your partial

</div>

Don't forget to put your partial _my_partial.html.erb in the same folder.

查看更多
再贱就再见
3楼-- · 2019-02-01 03:23

on the view do this:

link_to "Delete #{item}", '/model/confirm_deletion', :method => :delete, :remote => true #add the class and extra attributes if neeeded

on your controller

def confirm_deletion
end

and add a view to the confirm_deletion action in js

#RevealDelete.reveal-modal
  %a.close-reveal-modal ×
  %h3= "Delete #{item}"
  %p Are you sure you want to delete this?
  =link_to "Delete #{item}", resource, :method => :delete, :remote => :true, :confirm => resource, :class => 'button close-reveal-modal'
  %a.button.alert.close-reveal-modal Cancel

:javascript
  $(body).append($('#RevealDelete'));

that would make an ajax request to load that custom confirmation dialog, maybe you want to add some wrapper to insert the dialog instead of using body.append

查看更多
太酷不给撩
4楼-- · 2019-02-01 03:25

To add to the accepted answer, I only got it to work after changing the js portion to the following:

$('#div_id').html("<%= escape_javascript(render :partial => 'my_partial') %>");

Without the escape_javascript it was just rendering the partial in the background and not updating the view.

查看更多
登录 后发表回答