【问题标题】:HAML indentation while processing?处理时的HAML缩进?
【发布时间】:2013-10-03 20:14:07
【问题描述】:

我正在尝试在 .each 循环中使用 HAML 生成以下代码。根据循环中的真/假条件,它应该使用div2 创建一个新的div1,或者在之前的div1 中附加div2。这是逻辑的简化:

Desired output:

if true, append `div2` within `div1`, 

    <div class="div1">    #added by true condition
      div1 text
      <div class="div2">  #added by true condition
        div2 text
      </div>
      <div class="div2">  #added by false condition
        div2 text
      </div>
      <div class="div2">  #added by false condition
        div2 text
      </div>
    </div>

else, create a new `div1` and add `div2` within it

    <div class="div1">    #added by true condition
      div1 text
      <div class="div2">  #added by true condition
        div2 text
      </div>
    </div>
    <div class="div1">    #new div1, added by true condition
      div1 text
      <div class="div2">  #added by true condition
        div2 text
      </div>
    </div>

实际上,我正在尝试这样做

  //within a loop logic
    - if condition == true
      .div1
        div1 text
    -# in all conditions
        .div2
          div2 text

这是我的 HAML 逻辑,我使用的是 tab_up,但我认为这不是正确的 HAML 方法:

  //within a loop logic
    - if condition == true
      .div1
        div1 text
    - tab_up(2)  #trying to indent the HAML, not just the HTML output
    .div2
       div2 text

【问题讨论】:

  • “以编程方式生成”是什么意思?为了使div2div1 中,它需要在Haml 源代码中比div1 缩进更多。 tab_up 只控制输出外观,不影响结构。您需要提供一个示例来说明您正在尝试做的事情。
  • 问题不清楚。您排除的解决方案显然是正确的。
  • 感谢 matt 和 depa,我已尝试进一步澄清这一点。

标签: ruby-on-rails-3 haml


【解决方案1】:

在 Haml 中执行此类操作的方法是在将数据转换为 HTML 之前对其进行组织。 Enumerable 的方法在这里可以提供帮助。

您描述问题的方式,将您的枚举与slice_before 分开看起来是最直接的解决方案——您想在条件为真的每个项目之前打开一个新的div1(这里我假设条件取决于项目)。可能是这样的:

- items.slice_before {|item| determine_condition(item) }.each do |div1_block|
  .div1
    div1 text
    - div1_block.each do |item|
      .div2
        div2 text

根据您实际尝试执行的操作,可能会有更好的方法来组织您的数据 - 此处描述的方式表明您正在以低于需要的级别查看数据,因为您已经在考虑术语随时迭代和创建 HTML。

基本思想是获取一个数组数组(或Enumerator),每个内部数组代表div1 的内容。哈姆尔然后很容易掉出来。 chunkeach_slicegroup_by 是一些可能值得一看的 Enumerable 方法。

【讨论】:

  • 谢谢马特。不幸的是,由于其他要求,无法事先对模型进行分组。不过,它的顺序是正确的。
猜你喜欢
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多