【问题标题】:conditional formatting in rails partialsrails partials中的条件格式
【发布时间】:2008-11-04 07:48:19
【问题描述】:

我正在渲染一个轨道局部,我想在渲染局部时交替背景颜色。我知道这不是很清楚,所以这里是我想做的一个例子:

第一行灰色背景 第二行黄色背景 第三行灰色背景 第四行黄色背景
  • 抱歉,stackoverflow 接缝阻止了背景颜色的显示,但我认为这让我的想法变得清晰

这是我正在使用的视图代码

<table>
  <%= render :partial => 'row' :collection => @rows %>
</table>

_row.html.erb 部分看起来像这样

<tr bgcolor="#AAAAAA">
  <td><%= row.name %></td>
</tr>

问题是我不知道如何更改每隔一行的背景颜色。有没有办法做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby renderpartial


    【解决方案1】:

    您可以使用 Cycle 助手。像这样的:

    <tr class="<%= cycle("even", "odd") %>">
      <td><%= row.name %></td>
    </tr>
    

    或者在你的情况下使用 bgcolor 代替,虽然我会推荐使用 css 类。

    您可以循环访问两个以上的值:cycle('first', 'second', 'third', 'and_more')。

    还有:reset_cycle('cycle_name') 这可以确保在每次迭代中,您都将从循环列表的第一个值重新开始。

    查看rails documentation 了解更多示例。

    【讨论】:

    • 如果您在一个页面上使用多个列表或表格,我建议您命名您的周期。只需将 :name => 'some_unique_name' 传递到 cycle('a', 'b', ...) 调用的末尾。
    【解决方案2】:

    另一个想法,您可以使用 javascript 根据(TD 的总数 % 2)更改元素的样式。

    这样,您的所有视觉内容都包含在 html/css/javascript 层中。再说一次,如果禁用 javascript,此技术将不起作用。

    【讨论】:

      【解决方案3】:

      循环有一个“陷阱”:如果您应该附加到字符串,循环就会中断。例如,

      cycle('odd', 'even') << " some other classes"
      

      将打破循环。但是,颠倒顺序或构造字符串可以正常工作:

      "some other classes " << cycle('odd', 'even')
      "#{cycle('odd', 'even')} some other classes"
      

      我还没有(还)深入研究源代码,看看为什么会这样。另外,我正在使用 Rails 3.2.x

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-13
        • 1970-01-01
        • 2012-09-30
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        相关资源
        最近更新 更多