如何仅在单击 link 后才将局部变量发送到局部渲染?
How do I send a local variable to a partial rendered only after a link is clicked?
我有一个 Bootstrap 模态框,它会在单击此 link 时触发:
<a class="plus" href="javascript:;" data-toggle="modal" data-target="#myModal"> </a>
然后我在 _footer.html.erb
中有了这个
<%= render 'shared/tag_users_modal' %>
然后有这个标准Bootstrap模态:
<!-- Modal -->
<div class="modal tagging fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Tag User</h4>
</div>
<div class="modal-body">
<%= simple_form_for @node, url: add_tagged_user_node_path(@node), method: :post do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input_field :user, label: "Users", collection: @users, as: :check_boxes, checked: @node.user_tags %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
这不起作用,因为 @node
为 nil - 即未通过。我无法从我的 _footer
部分传递该变量,因此我希望能够在模态的原始执行中传递它。
我该怎么做?或者我该如何以其他方式做到这一点?
编辑 1
要添加更多上下文,调用 Bootstrap 模态的初始 link 实际上位于另一个局部变量 node
也传递给它的局部变量中。那个叫这样的:
<%= 渲染部分:"shared/box",本地:{node: node} %>
但是我需要继续执行仅在第一个 shared/box
中单击切换 link 后才触发的模式。
总结:
- /shared/box
部分具有触发 BS 模式的原始 link。
- /shared/footer' contains a render of another partial
tag_users_modal.
-
/shared/tag_users_modalcontains the modal, but I need the
@nodeobject passed to it and the
add_tagged_user_node_path` 开始工作。
现在它没有通过,因为我想不出办法把原来的 node: node
放到链中的第三个部分。
因此,最好在局部变量中使用局部变量而不是实例变量。
# your main view file:
<%= render partial: path_to_partial, locals: {bool: true} %>
# your partial:
<%= bool ? 1 : 2 %>
使用这些选项,部分将显示 1。
此外,作为 locals
选项传递局部变量的替代方法是使用 render
而不是 render partial
,如下所示:
# your main view file:
<%= render path_to_partial, bool: true %>
从上面可以推断,您必须将局部中的 @node
更改为 node
并在渲染局部的任何位置指定 {node: @node}
。
我有一个 Bootstrap 模态框,它会在单击此 link 时触发:
<a class="plus" href="javascript:;" data-toggle="modal" data-target="#myModal"> </a>
然后我在 _footer.html.erb
<%= render 'shared/tag_users_modal' %>
然后有这个标准Bootstrap模态:
<!-- Modal -->
<div class="modal tagging fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Tag User</h4>
</div>
<div class="modal-body">
<%= simple_form_for @node, url: add_tagged_user_node_path(@node), method: :post do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input_field :user, label: "Users", collection: @users, as: :check_boxes, checked: @node.user_tags %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
这不起作用,因为 @node
为 nil - 即未通过。我无法从我的 _footer
部分传递该变量,因此我希望能够在模态的原始执行中传递它。
我该怎么做?或者我该如何以其他方式做到这一点?
编辑 1
要添加更多上下文,调用 Bootstrap 模态的初始 link 实际上位于另一个局部变量 node
也传递给它的局部变量中。那个叫这样的:
<%= 渲染部分:"shared/box",本地:{node: node} %>
但是我需要继续执行仅在第一个 shared/box
中单击切换 link 后才触发的模式。
总结:
- /shared/box
部分具有触发 BS 模式的原始 link。
- /shared/footer' contains a render of another partial
tag_users_modal.
-
/shared/tag_users_modalcontains the modal, but I need the
@nodeobject passed to it and the
add_tagged_user_node_path` 开始工作。
现在它没有通过,因为我想不出办法把原来的 node: node
放到链中的第三个部分。
因此,最好在局部变量中使用局部变量而不是实例变量。
# your main view file:
<%= render partial: path_to_partial, locals: {bool: true} %>
# your partial:
<%= bool ? 1 : 2 %>
使用这些选项,部分将显示 1。
此外,作为 locals
选项传递局部变量的替代方法是使用 render
而不是 render partial
,如下所示:
# your main view file:
<%= render path_to_partial, bool: true %>
从上面可以推断,您必须将局部中的 @node
更改为 node
并在渲染局部的任何位置指定 {node: @node}
。