【问题标题】:Haml syntax: split a line to a couple of rowsHaml 语法:将一行拆分为几行
【发布时间】:2012-12-05 12:28:03
【问题描述】:

我在我的 rails 项目中为我的 html 模板使用 HAML。 我想弄清楚是否可以将一条很长的线分成几行:

%a.open-service{href: '#', data: {
  service_name: service.description,
  balance_type: "coinsurance",
  total: service.a_total_billed - service.a_rejected - service.a_not_covered, 
  discount: service} }

如您所见,我只想拥有一个带有 href 和一些数据属性的锚点,并且使其成为单行代码不会是一个漂亮的代码。 但是当我像上面那样做时,我得到一个错误:“不平衡的括号。”

有什么帮助吗?

【问题讨论】:

标签: ruby-on-rails syntax haml


【解决方案1】:

根据Haml documentation,可以在逗号之后放置新行。所以,也许像下面这样的东西会起作用:

%a.open-service{href: '#', 
                data: { service_name: service.description,
                        balance_type: "coinsurance",
                        total: service.a_total_billed - service.a_rejected - service.a_not_covered, 
                        discount: service} }

【讨论】:

    【解决方案2】:

    我相信您可以在| 的帮助下实现这一目标。您可以在haml 文档here 中了解它。

    【讨论】:

    • 它是故意的,但唯一的方法就是分解所有长的属性。 IE。第一行包含逗号之前的第一个属性,对于 linter 等来说已经太长了。
    【解决方案3】:

    您可以随时在逗号后换行。所以如果你有这个:

    %div.panel
      .panel-body
        = column_chart @consumptions.filter_by_meter(params[:meter]).filter_by_appliance(params[:appliance]).where('start > ?', Time.now - 1.month).group_by_day(:start, format: '%d').sum(:power), colors: ["#7FC564"], title: 'Últimos 30 dias', library: { chartArea: { left: 60, top: 20, width: '95%', height: '85%' }, hAxis: { textPosition: 'bottom', textStyle: { fontSize: 12 }, minTextSpacing: 2 }, vAxis: { textPosition: 'left', format: '# kWh' } }
    

    首先,您可以在每个逗号上换行以进入以下内容:

    %div.panel
      .panel-body
        = column_chart @consumptions.filter_by_meter(params[:meter]).filter_by_appliance(params[:appliance]).where('start > ?', Time.now - 1.month).group_by_day(:start, format: '%d').sum(:power),
          colors: ["#7FC564"],
          title: 'Últimos 30 dias',
          library: { chartArea: { left: 60, top: 20, width: '95%', height: '85%' },
          hAxis: { textPosition: 'bottom', textStyle: { fontSize: 12 }, minTextSpacing: 2 },
          vAxis: { textPosition: 'left', format: '# kWh' } |
    

    不过,第一行还是太大了!没问题。管道字符可以指定多行字符串。

    它位于一行的末尾(在一些空格之后),表示后面所有以 | 结尾的行将被评估为好像它们在同一行。所以你最终会得到:

    %div.panel
      .panel-body
        = column_chart @consumptions.filter_by_meter(params[:meter]) |
          .filter_by_appliance(params[:appliance]) |
          .where('start > ?', Time.now - 1.month) |
          .group_by_day(:start, format: '%d') |
          .sum(:power), |
          colors: ["#7FC456"],
          title: 'Últimos 30 dias',
          library: { chartArea: { left: 60, top: 20, width: '95%', height: '85%' },
          hAxis: { textPosition: 'bottom', textStyle: { fontSize: 12 }, minTextSpacing: 2 },
          vAxis: { textPosition: 'left', format: '# kWh' } |
    

    请注意,即使是多行代码块中的最后一行也应该以 | 结尾。

    希望对你有帮助!

    【讨论】:

      【解决方案4】:

      我刚刚遇到这个问题,我遇到了同样的问题,但选择的答案对我没有帮助。所以我只是建立在米哈伊尔的回答之上。如果你有很长的属性没有用逗号分隔(比如你正在使用 angularjs 之类的东西),你可以通过在每一行的末尾添加 + | 将它分成几行 (包括最后一行这个多行块,这是棘手的部分)

      就像这样:

      %select{ ng: { model: "my_model_name",
                   options: "myitem as myitem.formattedName for myitem in container.item_list() | " + |
                            "without: another_list.item_list()" }}                                    |
      

      你可以阅读这个in HAML documentation

      【讨论】:

        【解决方案5】:

        有时,HAML 中的 Multiline 与添加 rails 代码几乎没有关系,因为某些元素需要有很多属性,例如 Bootstrap Progress Bar,而且在一行上看起来很丑陋。

        这让我很头疼:

        .progress
          .progress-bar.progress-bar-striped.progress-bar-success{ |
                          role: "progressbar",                     |
                          aria: {                                  |
                            valuenow: "#{@percent}",               |
                            valuemin: "0",                         |
                            valuemax: "100",                       |
                          },                                       |
                          style: "width: #{@percent}%;" }          |
            = "#{@percent}%"
        

        这是解决我的难题的方法:

        .progress
          .progress-bar { class: "progress-bar-striped progress-bar-success",
                          role: "progressbar",
                          aria: { valuenow: "#{@percent}",
                                  valuemin: "0",
                                  valuemax: "100", 
                          },
                          style: "width: #{@percent}%;" }
            = "#{@percent}%"
        

        请注意,即使没有竖线行,只要前一行以逗号结尾,并且没有以左括号结尾的行,

        【讨论】:

          猜你喜欢
          • 2020-08-10
          • 2021-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多