0

我需要以 4 个条目的行显示视频。

它应该看起来像这样(x一个视频):

x | x | x | X
x | x | x | X
x | x | x | X

现在,我正在调用一个while循环,当我可以再获取 4 个视频时,该循环将停止(因此它不会因为一行仅显示三个视频而破坏布局)。我正在使用一个变量 ( n) 来拍摄 4 个视频 ( @videos[n..n+3])。

- n = 0
  - while n+4 < @videos.count do
    .row
      %ul.thumbnails            
        - @videos[n..n+3].each do |v|
          %li.span3
            # code for showing the video
    - n +=4

必须有更好的方法来做到这一点。

更新

我发现了很棒的 Rails 函数in_groups_of

如this SO answer所示

ActiveSupport 方法 in_groups_of 接受一个数组并将其分组

更新 2

我的第一个更新是一个可行的解决方案,但接受的答案更好。

4

1 回答 1

1

您正在使用 Bootstrap 的.thumbnails组件,.span3因此您已经自动获得了四行。您不需要任何循环、嵌套列表或实用方法。

%ul.thumbnails            
  - @videos.each do |v|
    %li.span3
      # code for showing the video

它只是工作:http: //jsbin.com/uguqib/edit

PS ActiveSupportin_groups_of只是 Ruby 内置的包装器Enumerable#each_slice,添加了填充项以完善最后一组。如果你需要像这样的填充元素,你可以很容易地自己做填充:

- @videos += [ nil ] * ( 4 - @videos.size % 4 )
%ul.thumbnails
  - @videos.each do |v|
    %li.span3
      - if v then render_the_video_element
      - else      render_a_filler_element end
于 2012-07-24T03:25:19.943 回答