【问题标题】:who changed the value of "params[:tab]"?谁改变了“params[:tab]”的值?
【发布时间】:2015-05-12 00:26:18
【问题描述】:

在一个名为x.html.erberb 文件中,我被下面的小sn-p 代码弄糊涂了:

  <% 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',反之亦然,或者说当我切换一个标签Excursion时谁更改了params[:tab]的值或者Workshop对应的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] 并发现它也可以正常工作。而从&lt;%= params[:tab]=='excursions' ? 'active':''%&gt;来看,这一定是相对于某个rails的魔法吧?

【问题讨论】:

    标签: ruby-on-rails twitter-bootstrap ruby-on-rails-3.2


    【解决方案1】:

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

    params[:tab] |= "Excursion"
    

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

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

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

    --

    根据 params[:tab] 值确定最初设置为活动的选项卡。之后,您单击的任何选项卡都将被引导 JS 和 CSS 设置为活动状态,并且可以通过我提供的链接进行描述

    【讨论】:

    • 你的链接没有解释params,我能不能理解当前的data-toggle属性值(这里是tab)决定了params[:tab]的值?
    • 你的链接没有解释params,我能不能理解当前的data-toggle属性值(这里是tab)决定了params[:tab]的值?我再次考虑了您的答案并确保它与数据切换无关,因为即使我将所有 params[:tab] 更改为 params[:tabsssss],它也能正常工作
    • 您的问题是指 params[:tab] 在控制器中显示为更改值吗?
    • 根据 params[:tab] 值确定最初设置为活动的选项卡。之后,您单击的任何选项卡都将被引导 JS 和 CSS 设置为活动状态,并且可以通过我提供的链接进行描述
    • 感谢您的耐心等待!我同意你的看法,但&lt;li class="active"&gt;&lt;li class&gt; 中的active 值不是由params[:tab] 确定的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2011-09-02
    相关资源
    最近更新 更多