ROR 将参数传递给模态
ROR pass params to modal
我正在尝试打开一个显示项目列表的模式。项目列表已经在视图中作为变量可用。如何将此变量传递给模态?
主视图大致如下:
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
是模态结构的偏音
您可以直接将其传递给模态。这是我所做的,在我看来,我有一个按钮可以触发我的模式,然后我创建了一个部分(以干燥我的代码)_modal.html.erb
并在我的按钮之后调用了那个部分。
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#modal"></button
<%= render 'modal' %>
确保你的模式有 id <div class="modal fade" id="modal" tabindex="-1" role="dialog">...
伙计!
您可以像通常对视图组件那样进行设置。更好的是,将您的模型分成部分,比如 _modal.html.erb
。然后你可以通过
调用模态
<%= render 'partial_name', :variable_name => your_current_variable %>
该变量现在可以作为 variable_name
在局部变量中使用。此外,如果它是像 @your_current_variable
这样的实例变量,那么它将在您的部分中自动可用。
与视图中已有项目列表并希望将其传递给模态相反,您可以做的一件事是制作按钮(或 link )以打开模态以调用ajax 的控制器操作,然后让操作响应 JS,您现在将在其中使用相应的 view.js 文件来填充模式以及以编程方式呈现它(在填充它之后)。
示例:
Link 打开模式:
<%= 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
)列表。
Note: In this example, I made use of both erb
, js
, and material-modal
. If you are using something different from these ( maybe slim
, haml
, coffee
, bootstrap
...), you will have to suite the example to your case.
希望对您有所帮助。
我正在尝试打开一个显示项目列表的模式。项目列表已经在视图中作为变量可用。如何将此变量传递给模态?
主视图大致如下:
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
是模态结构的偏音
您可以直接将其传递给模态。这是我所做的,在我看来,我有一个按钮可以触发我的模式,然后我创建了一个部分(以干燥我的代码)_modal.html.erb
并在我的按钮之后调用了那个部分。
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#modal"></button
<%= render 'modal' %>
确保你的模式有 id <div class="modal fade" id="modal" tabindex="-1" role="dialog">...
伙计!
您可以像通常对视图组件那样进行设置。更好的是,将您的模型分成部分,比如 _modal.html.erb
。然后你可以通过
<%= render 'partial_name', :variable_name => your_current_variable %>
该变量现在可以作为 variable_name
在局部变量中使用。此外,如果它是像 @your_current_variable
这样的实例变量,那么它将在您的部分中自动可用。
与视图中已有项目列表并希望将其传递给模态相反,您可以做的一件事是制作按钮(或 link )以打开模态以调用ajax 的控制器操作,然后让操作响应 JS,您现在将在其中使用相应的 view.js 文件来填充模式以及以编程方式呈现它(在填充它之后)。
示例:
Link 打开模式:
<%= 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
)列表。
Note: In this example, I made use of both
erb
,js
, andmaterial-modal
. If you are using something different from these ( maybeslim
,haml
,coffee
,bootstrap
...), you will have to suite the example to your case.
希望对您有所帮助。