0

次のコードを使用して、ゼブラストライプの一連のdivを作成しようとしています。

= content_tag_for(:div, conversation.receipts_for(current_user), :class => cycle("odd", "even")) do |receipt|
  %p=receipt.content

理論的には、クラス名は各行で「奇数の受信」と「偶数の受信」の間を循環する必要があります。代わりに、私は毎回「奇妙な領収書」を受け取ります。順序付けされていないリストとテーブルも使用してみましたが、どちらも正しく機能しません。何が起こっているのか分かりますか?

4

4 に答える 4

3

これは、あなたが書いた方法では機能しません。cycleは、 を呼び出したときに1 回content_tag_for呼び出され、 を返します"odd"。に渡されるのはその値であり、関数ではありません。引数にブロック/ラムダを受け入れない限り、やろうとしていることはできません。"odd"content_tag_forcyclecontent_tag_forstyle

本質的に、関数を呼び出して、2 番目の関数の戻り値を渡します。

func1( func2() )

これを処理する最善の方法は、コレクション レンダリングを使用することです。

あなたの見解では:

= render conversation.receipts_for(current_user)

別のパーシャルでは、おそらくapp/views/receipts/_receipt.html.haml次のようになります。

= div_for receipt, :class => cycle('odd', 'even')
  %p=receipt.content
于 2012-07-22T17:45:20.087 に答える
1

私はこれをやや醜いもので動作させることができます:

-conversation.receipts_for(current_user).each do |receipt|
  %div{:class => cycle("receipt odd", "receipt even")}
    %p=receipt.content

誰かがよりエレガントな解決策を見つけたら、私に知らせてください。

于 2012-07-22T17:39:22.530 に答える
0

サイクルの名前を追加する必要があります。名前のない同じブロックに 2 つのサイクルがある場合、それらは互いに循環し、同じ結果が生成されます。

cycle("odd", "even", name: "cycle_name")

あなたの場合、私はそうします

-conversation.receipts_for(current_user).each do |receipt|
  = content_tag_for(:div, receipt, :class => cycle("odd", "even", name: "receipt")) 
    %p=receipt.content

サイクルリファレンス

于 2015-06-19T17:37:38.910 に答える