【问题标题】:render partial on click点击时渲染部分
【发布时间】:2013-03-02 13:02:10
【问题描述】:

我想在一些标准操作上调用 partials。我正在使用这种方法来调用部分:

 %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 'Delete', '#', :partial => 'layouts/delete', :remote => :true? 

这样我只在点击而不是在页面加载时渲染那个部分?

【问题讨论】:

    标签: ruby-on-rails jquery renderpartial


    【解决方案1】:

    您可以使用以下 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 放在同一个文件夹中。

    【讨论】:

    • 只是为了通知,format.js 将使用部分类似action_method_name.js.erb。所以如果你需要渲染 2 个部分,你需要指定另一个部分的名称
    • 我收到此错误undefined local variable or method delete_content_path' for #:0x007fd6972c9320>` 我需要为此创建一个路由吗?
    • 将路线添加到我的 routes.rb 中,尽管它似乎没有呈现任何内容:S
    • 似乎 js 文件似乎没有采取任何行动
    • 请注意,_my_partial.html.erb 文件中应该有一些内容,以便 div 显示在其中。
    【解决方案2】:

    要添加到已接受的答案,我只有在将 js 部分更改为以下内容后才能使用它:

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

    没有escape_javascript,它只是在后台渲染部分而不是更新视图。

    【讨论】:

      【解决方案3】:

      在视图上这样做:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多