我正在尝试打开一个显示项目列表的模态。项目列表已在视图中作为变量提供。如何将此变量传递给模态?
以下是主视图的大致情况:
View.html.erb
<div>
<%= @users.each do |user|%>
<h1>user.name</h1>
<h2>user.email</h2>
<%= link_to remote: true, 'data-toggle' => 'modal', 'data-target' => '#taskModal do %>
<i><%= user.tasks.count%></i>
<% end %>
<% end %>
</div>
<div class="modal" id="taskModal" aria-hidden="true">
...
<%= render partial: 'list_modal' %>
list_modal
是模态结构的一部分。
答案 0 :(得分:10)
与视图中已有项目列表并希望将其传递给模态相反,您可以做的一件事就是使用按钮(或链接)打开模态以通过ajax调用控制器操作,然后让动作响应JS,你现在将使用相应的view.js文件来填充模态以及以编程方式呈现它(填充之后)。
示例:强>
链接到开放式模式:
<%= link_to "Open users list", users_open_list_modal_path, remote: true %>
用户打开列表模式控制器操作:
def open_list_modal
@user_list = User.all
respond_to do |format|
format.js
end
end
open_list_modal.js.erb:
#populate modal
$('#modal').html('#{ escape_javascript(<%= render partial: 'user_list', locals: {user_list: @user_list} )}');
#render modal
$('#modal').openModal();
然后在模态本身上,您现在可以访问user_list
(非@user_list
)列表。
注意:在此示例中,我使用了
erb
,js
和material-modal
。如果您使用的不同内容(可能是slim
,haml
,coffee
,bootstrap
...),则必须将示例与您的案例进行对比。< / p>
希望这有帮助。
答案 1 :(得分:1)
你可以直接将它传递给模态。在这里我做了什么,在我看来我有一个触发我的模态的按钮,然后我创建了一个部分(干掉我的代码)_modal.html.erb
并在我的按钮后调用了部分。
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#modal"></button
<%= render 'modal' %>
确保您的模态标识为<div class="modal fade" id="modal" tabindex="-1" role="dialog">...
gl mate!
答案 2 :(得分:-1)
您可以将其设置为您通常对视图组件执行的操作。更好的是,将你的模型分成部分,比如它_modal.html.erb
。然后你可以通过
<%= render 'partial_name', :variable_name => your_current_variable %>
变量现在可以在部分内部以variable_name
的形式使用。此外,如果它是@your_current_variable
之类的实例变量,那么它将在您的部分变量中自动显示。