Действительно ли возможно иметь отступ Haml HTML, сгенерированный помощником представления в направляющих?

Единственной вещью, которую я добавил бы к ответ Eric , является объяснение; я чувствую, что знание того, почему код работает, лучше, чем знание, какой код работает.

объяснение - это: скажем, Вы хотите число между 2,5 и 4.5. Диапазон 2.0 (4.5 - 2.5). NextDouble только возвраты число между 0 и 1.0, но если Вы умножаете это на диапазон, Вы получите число между 0 и диапазонами .

Так, это дало бы нам случайный, удваивается между 0,0 и 2.0:

rng.NextDouble() * 2.0

, Но, мы хотим их между 2,5 и 4.5! Как мы делаем это? Добавьте самое маленькое количество, 2.5:

2.5 + rng.NextDouble() * 2.0

Теперь, мы получаем число между 0,0 и 2.0; если Вы добавляете 2.5 к каждому из этих значений, мы видим, что диапазон теперь между 2,5 и 4.5.

Сначала я думал, что имело значение, если b> a или a> b, но если Вы работаете он оба способа, которыми Вы найдете, это удается тождественно, пока Вы не портите порядок используемых переменных. Мне нравится выражать его более длинными именами переменной, таким образом, я не становлюсь перепутанным:

double NextDouble(Random rng, double min, double max)
{
    return min + (rng.NextDouble() * (max - min));
}

5
задан Hakan Ensari 7 October 2009 в 16:00
поделиться

2 ответа

Попробуйте вспомогательный метод haml_tag , поставляемый с Haml. В некотором смысле это похоже на content_tag , но выводит HTML с правильным отступом. Основное отличие состоит в том, что он выводит данные непосредственно в шаблон, а не возвращает строку. Например:

module ThingsHelper
  def foo
    haml_tag :ul do
      3.times { haml_tag(:li, "foo") }
    end
  end
end

(Кстати, очень плохим стилем Ruby считается использование для отступа чего-то другого, кроме двух пробелов).

10
ответ дан 13 December 2019 в 19:30
поделиться

Я сомневаюсь в этом - по крайней мере, без

Ваш = foo просто печатает то, что возвращает ваш помощник foo - haml не анализирует это. И вы также не можете написать haml в своем вспомогательном методе.

Самый простой способ, который я могу придумать для решения этой проблемы, - это просто добавить буквальные символы пробела в ваш помощник (например, \ n и ] \ t ).

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

1
ответ дан 13 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: