Подтвердить что ты не робот

Синтаксис Haml: разделите строку на пару строк

Я использую HAML в моем проекте rails для своих html-шаблонов. Я хотел бы выяснить, можно ли его разделить очень длинную строку и сделать пару строк:

%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 и некоторым атрибутам данных, и сделать ее одной строкой не будет довольно хорошим кодом. Но когда я делаю это, как описано выше, я получаю сообщение об ошибке: "Несбалансированные скобки".

любая помощь?

4b9b3361

Ответ 1

Новые строки могут быть размещены после запятых, в соответствии с документацией 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} }

Ответ 2

Я считаю, что вы можете достичь этого с помощью |. Вы можете прочитать об этом в документации haml здесь.

Ответ 3

Я только что пришел к этому вопросу, у меня была такая же проблема, но выбранный ответ мне не помог. Поэтому я просто основываюсь на ответе Михаила. Если у вас очень длинные атрибуты, которые не разделены запятыми (например, вы используете что-то вроде angularjs), вы можете разбить его на несколько строк, добавив + | в конце каждой строки (включая последнюю строку в этот многострочный блок, который является сложной частью).

Точно так же:

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

Вы можете прочитать об этом в документации HAML.

Ответ 4

Вы всегда можете разбить свою запятую после запятой. Поэтому, если у вас есть это:

%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' } |

Обратите внимание, что даже последняя строка в многострочном блоке должна заканчиваться на |.

Надеюсь, что это поможет!

Ответ 5

Иногда Multiline в HAML может не иметь ничего общего с добавлением кода 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}%"

Обратите внимание, что даже без строк панели трубопроводов, если предыдущая строка заканчивается запятой, и никакая строка не заканчивается открытой скобкой,