我正在尝试使用以下代码创建斑马条纹系列div:
= content_tag_for(:div, conversation.receipts_for(current_user), :class => cycle("odd", "even")) do |receipt|
%p=receipt.content
理论上,类名应在每行的“收据奇数”和“收货均匀”之间循环。相反,我每次都得到“收据奇怪”。我也尝试过使用无序列表和表格,但它们也无法正常工作。知道发生了什么事吗?
答案 0 :(得分:3)
这不可行,就像你写的那样。在您致电cycle
时,content_tag_for
被称为一次,并返回"odd"
。 值,"odd"
,传递到content_tag_for
,不函数cycle
。除非content_tag_for
接受style
参数的块/ lambda,否则你无法做你想做的事。
本质上,你正在调用一个函数并传入第二个函数的返回值:
func1( func2() )
处理此问题的最佳方法是通过集合渲染。
在您看来:
= render conversation.receipts_for(current_user)
在单独的部分中,可能是app/views/receipts/_receipt.html.haml
:
= div_for receipt, :class => cycle('odd', 'even')
%p=receipt.content
答案 1 :(得分:1)
我能够让这个有点丑陋:
-conversation.receipts_for(current_user).each do |receipt|
%div{:class => cycle("receipt odd", "receipt even")}
%p=receipt.content
如果有人找到更优雅的解决方案,请告诉我。
答案 2 :(得分:0)
除了简洁,而不是haml,语法之外,概念就在那里:
= div_for(conversation.receipts_for(current_user)) do |receipt|
p class=cycle("odd", "even")
= receipt.content.try(:html_safe)
我同意,如果你正在进行Rails开发,习惯于部分是必须的,但我喜欢避免在循环中调用partials(对于集合) - 大多数情况下它不会给开发日志添加噪声,不确定一种方法与另一种方法的性能影响(一些讨论here)
答案 3 :(得分:0)
您应该为周期添加名称。如果在同一个程序段中有两个循环而没有名称,它们将相互循环并产生相同的结果。
help for
对于你的情况,我会做
cycle("odd", "even", name: "cycle_name")