谁更改了 "params[:tab]" 的值?

who changed the value of "params[:tab]"?

在一个名为 x.html.erberb 文件中,我对以下小片段代码感到困惑:

  <% params[:tab] |= "Excursion" %>
  <% availableModels.each do |modelName| %>
    <% if modelName == "Excursion" %>
      <li class="<%= params[:tab]=='excursions' ? 'active':''%>">
        <a id="excursions_tab" href="#tabExcursions" data-toggle="tab"> Excursions
        </a>
      </li>
    <% elsif modelName == "Workshop" %>
      <li class="<%= params[:tab]=='workshops' ? 'active':''%>">
        <a id="workshops_tab" href="#tabWorkshops" data-toggle="tab">Workshop
        </a>
      </li>
    <% end %>

我发现我搞不懂params[:tab]是怎么变的,比如从params[:tab] = 'excursions'变成params[:tab] = 'workshops',反之亦然,或者说谁改变了[=16的值=] 当我切换一个选项卡 ExcursionWorkshop 相应的 html:

<li class="active">
   <div id="tab_excursions"> ...</div>
</li>
<li class>
   <div id="tab_resources"> ... </div>
</li>

<li class>
    <div id="tab_excursions"> ...</div>
</li>
<li class="active">
   <div id="tab_resources"> ... </div>
</li>

为了找到答案,我尝试将 params[:tab] 更改为 params[:tabx],发现它也可以正常工作。而且从<%= params[:tab]=='excursions' ? 'active':''%>来看,这一定和某个rails的魔法有关吧?

params[:tab]创建后不会改变。这是 rails 存根的一部分,它在页面加载时执行其逻辑以协助创建标记。我们可以保证在当前代码中定义了 params[:tab] 散列的唯一方法是 at,

params[:tab] |= "Excursion"

|= 将 params[:tab] 分配给 "Excursion"(如果尚未设置)。在我当前的视图中,params[:tab] 将始终等于 "Excursion"。如果 "excursion" 或 "workshop" 在页面加载时显示为活动状态,则此哈希设置早于此代码段。

你的元素中有 data-toggle 属性,它将这两个项目分组在同一个父节点下(我相信)。 Bootstrap 中有一个 Javascript 函数,它会监听您点击这些元素中的任何一个,然后相应地在这两个元素之间切换。

简而言之,这是一个Bootstrap,JS功能。检查一下:http://getbootstrap.com/2.3.2/javascript.html#tabs,寻找可切换的标签

--

确定哪个选项卡最初设置为活动是基于参数[:tab] 值。之后,无论您单击哪个选项卡,bootstraps JS 和 CSS 都会将其设置为活动状态,并且可以通过我提供的 link

进行描述