Rails:用数据填充模态

时间:2016-07-27 16:36:28

标签: ruby-on-rails ajax coffeescript modal-dialog

我知道这是一个老问题,但我无法解决它。 我想在模态中显示一个注释列表,特定于每次迭代。

内容has_many评论,评论belongs_to content`

@contents.each do |content| 
content.title
button_to('read', category_modal_path(:comment_id => content.id), remote: true, :class=> 'modal-trigger2', 'data-target'=>'modal3')
end

控制器

def category_modal
@comments = Comment.online.where(content_id: params[:comment_id])
respond_to do |format|
  format.js
end

模态

<div id="modal3" class="modal modal-fixed-footer">
...here I want show the list of comments

category_modal.js

$('#modal3').html(<%= j( render partial: 'shared/modal2', locals: {comments: @comments} )%> );

咖啡

$('.modal-trigger2').leanModal()

模态打开但没有数据..帮助会非常好..

1 个答案:

答案 0 :(得分:0)

好的,经过一个小时的努力,我能够解决你的问题。请按照以下步骤操作。

  1. 首先从咖啡脚本中删除$('.modal-trigger2').leanModal()。它不再需要了。
  2. category_modal.js中粘贴以下代码

    $('#modal3').html("<div href='#modal3' id='content_<%=params[:comment_id] %>'><%= j( render partial: 'shared/modal2', locals: {comments: @comments} )%></div>");
    $('#content_<%=params[:comment_id]%>').leanModal();
    $('#content_<%=params[:comment_id]%>').trigger('click');
    
  3. 您可能需要在类别列表中添加method: :get如果您的路由不是post类型,那么

    @contents.each do |content| 
      content.title
      button_to('read', category_modal_path(:comment_id =>content.id), remote: true, :class=> 'modal-trigger2',method: :get)
    end
    
  4. 好的,现在告诉我这是什么问题。 基本上它是leanModal的混乱如果你使用了bootstap模态,那就不是问题了。

    基本上每当我们在任何元素上调用leanModal它就会停止它的默认行为i-e Click所以从现在开始点击它时,它会打开弹出窗口,其中显示相应的内容在点击的项目的href中。

    因此,当我致电$('.SomeClass').leanModal()时,它会为所有具有课程SomeClass的项目添加点击事件,并在点击某个项目并显示内容时打开模态。

    因此,在您调用$('.modal-trigger2').leanModal()的情况下,它只是为您的所有内容按钮添加了一个点击事件,并在您点击其中任何内容时打开弹出窗口。它甚至没有向服务器发送ajax调用。 如您所知,modal3容器中没有任何内容,这就是它打开空模式的原因。

    所以我现在做的是删除此调用并移动category_modal.js中的所有弹出逻辑 因此,无论何时单击内容,它都会向服务器发送ajax请求。在JS视图中,我正在做同样的事情,但现在我在comments周围添加了一个包装器,并根据您请求的ID设置content_id唯一。 之后,我在这个新创建的包装器div上调用leanModal。 并触发click事件,以便模态自动显示。

    P.S

    您不一定需要这些动态ID,以下代码也可以使用。

    $('#modal3').html("<div href='#modal3' id='leanModalContainer'><%= j( render partial: 'shared/modal2', locals: {comments: @comments} )%></div>");
    $('#leanModalContainer').leanModal();
    $('#leanModalContainer').trigger('click');