基础文本网格

Foundation Text Grid

我正在尝试创建一个包含文本而非图像的网格,类似于 Zurb 模板中的 'content section':http://foundation.zurb.com/templates/orbit.html

我想在每行上创建三个文本块。

我能够创建这个,但出现的问题是有时在我的数据中一行只有一两个文本块。

例如,如果一个产品缺少它的位置,有没有办法移动成分来代替位置,或者如果缺少类别和位置,将成分移动到类别的位置?

我在 Rails 和 Foundation 5 上使用 Ruby。

谢谢!

  <div class="row">
    <div class="large-4 columns">
      <% unless @product.category.nil? %>
      <div class="product-heading">Product Category</div>
      <div class="product-value">
        <%= @product.category %>
      </div>
      <% end %>
    </div>

    <div class="large-4 columns">
      <% unless @product.location.nil? %>
      <div class="product-heading">Product Location</div>
      <div class="product-value">
        <%= @product.location.sort.join(", ") %>
      </div>
      <% end %>
    </div>

    <div class="large-4 columns">
      <% unless @product.ingredients.nil? %>
      <div class="product-heading">Product Ingredients</div>
      <div class="product-value">
        <%= @product.ingredients.sort.join(", ") %>
      </div>
      <% end %>
    </div>
  </div>

HTML 根据 Max Williams 的建议生成。

  <div class="row">
    <div class="large-4 columns">
      <div class="product-heading">Product Category</div>
      <div class="product-value">Food </div>
    </div>
    <div class="large-4 columns">
      <div class="product-heading">Product Ingredients</div>
      <div class="product-value">Flour, Sugar </div>
    </div>
  </div>

Javascript 尝试删除空的 li 标签

<script>$('li, p')
  .filter(function() {
    return $.trim($(this).text()) === '' && $(this).children().length == 0
  })
  .remove();
</script>

关键是寻找重复的元素,并将它们抽象出来,例如使用循环。例如

<% product_cells = [["Category", @product.category], ["Location", @product.location_string], ["Ingredients", @product.ingredients_string]] %>
<div class="row">
  <% product_cells.each do |title, data| %>
    <% unless data.blank? %>    
      <div class="large-4 columns">
        <div class="product-heading">Product <%= title %></div>
        <div class="product-value"><%= data %> </div>
      </div>
    <% end %>
  <% end %>
</div>

请注意,我已将测试放在不同的位置,因此如果数据为空,则会跳过整个 large-4 div。

这种东西@product.location.sort.join(", ")通常应该用Product模型中的方法代替,例如

#in Product
def location_string
  self.location.reject(&:blank?).sort.join(", ")
end

def ingredients_string
  self.ingredients.reject(&:blank?).sort.join(", ")
end

那么你可以把上面的代码改成

<% product_cells = [["Category", @product.category], ["Location", @product.location_string], ["Ingredients", @product.ingredients_string]] %>

编辑:更改字符串方法以应对 nils

EDIT2:更改了我原来的答案以使用我添加的模型方法。