2013-03-02 96 views
8

我想减少必须在我的应用程序中重写的代码量,并且想要调用一组标准运算部分。渲染部分点击

目前这是我使用

调用部分

%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 

则在该方法我部分

#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 

我怎么能有这有类似的link_to“删除” ,'#',:partial =>'layouts/delete',:remote =>:true?

,这样我只是渲染部分的点击,而不是当页面实际上是在视图加载

回答

26

你可以做的对话框,使用JavaScript这样的:

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

在相应的控制器的行动,那么将是这样的:

我的控制器:

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

然后你就可以创建delete_content.js.erb链接你的正确的目录里面有你把下面的代码:

delete_content.js.erb

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

然后在您的视图:

delete_content.html.erb

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

</div> 

不要忘记将您的部分_my_partial.html.erb放在同一个文件夹中。

+0

只是为了通知,格式。js'将使用部分像'action_method_name.js.erb'。所以如果你需要渲染2个partials,你需要指定另一个partials的名字 – 2013-03-02 16:51:53

+0

即时通讯错误'未定义的局部变量或方法'delete_content_path'为#<#:0x007fd6972c9320>'我需要吗?创建一个工作路线? – 2013-03-02 22:50:38

+0

添加了路线,以我的routes.rb,虽然它似乎没有呈现任何东西:S – 2013-03-03 10:05:28

0

时做到这一点:

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

控制器

def confirm_deletion 
end 

,并添加js中的confirm_deletion动作的视图

#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')); 

,将使一个Ajax请求加载自定义的确认对话框中,也许你想添加一些包装插入而不是使用body.append

15

要添加到接受的答案,我只得到它改变了JS部分以下后,开始工作:

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

没有escape_javascript这只是渲染局部的背景和没有更新的观点。

+0

你是一个救星! – 2015-09-21 13:10:51