0

我有一个引导莫代尔点击该链接时触发:如何在点击链接后将局部变量发送到局部渲染?

<a class="plus" href="javascript:;" data-toggle="modal" data-target="#myModal">&nbsp;</a> 

然后我有这个在我_footer.html.erb

<%= render 'shared/tag_users_modal' %> 

,然后有这个标准的引导模态:

<!-- 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">&times;</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是零 - 即它没有通过。我无法从我的_footer部分传递该变量,所以我希望能够在模态的原始执行中传递它。

我如何做到这一点?或者我如何以另一种方式做到这一点?

编辑1

要添加更多的上下文,即调用引导模态初始链路实际上是另一部分是具有node一个局部变量传递给它也。一个被称为是这样的:
<%=渲染部分:“共享/箱”,当地人:{节点:节点}%>

但我仍然需要继续模态的执行仅切换之后被解雇首先点击链接shared/box

总结: - /shared/box部分有原始链接,引发BS模式。 - /shared/footer' contains a render of another partial tag_users_modal . -/shared/tag_users_modal contains the modal, but I need the @node object passed to it and the add_tagged_user_node_path`工作。

现在它没有通过,因为我不能想出一个办法来获得原来的node: node到链中的第三部分。

回答

1

由于这个原因,最好在局部变量中使用局部变量而不是实例变量。

# 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}

+0

我明白,但这不是问题。发生了什么是我的部分存储在'shared'目录中,并且该部分是从'shared'目录中的另一个部分调用的。该部分被调用了一个局部变量'node:node',但是因为我正在将执行传递给只在上面的链接被点击时触发的模式,所以我无法将该'node:node'传递给部分在点击链接之后呈现弹出/模式。我希望这更清楚。如果这是标准控制器中的标准视图,则您的建议可行。但是它不是:( – marcamillion 2015-03-13 07:38:17

+0

我增加了更多的细节,所以你可以更清楚地知道我想实现的目标。 – marcamillion 2015-03-13 07:43:16

+0

首先,从你的partials中删除所有的实例变量,然后使用局部变量,这只是一般性的建议。在你定义它的时候,问题是你根本没有想要使用的变量,没有“解决方案”,你必须重新填充变量,然后才能使用变量。在链接中有一些参数,当链接被点击并且控制器动作被调用时,它将帮助你重新找到'node'。 – Humza 2015-03-13 08:05:13