我知道这是一个老问题,但我无法解决它。 我想在模态中显示一个注释列表,特定于每次迭代。
内容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()
模态打开但没有数据..帮助会非常好..
答案 0 :(得分:0)
好的,经过一个小时的努力,我能够解决你的问题。请按照以下步骤操作。
$('.modal-trigger2').leanModal()
。它不再需要了。在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');
您可能需要在类别列表中添加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
好的,现在告诉我这是什么问题。
基本上它是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');