Тонкие шаблоны: не удается отобразить шаблон, возникает синтаксическая ошибка

Я хотел бы использовать полный синтаксис html со Slim. Мне не нужна криптография, которую они предлагают. Но я думаю, что это невозможно. Вот мой html-код, и Slim выдает ошибку.

Цель:

Я хочу не выводить дополнительный класс элемента div, если выполняется какое-то условие:

<div class="foo bar"></div>   # <-- standard
<div class="foo"></div>   # <-- no "bar" class if some condition is met

И вот мой код Slim:

<body> # <-- 11th line
    - (1..5).each do |i|   # <-- The dash means a line of Ruby code...
        <div class="foo    # <-- ...after it an indentation of lines follows
           - if(i != 2)    #  <-- if "i" is not 2
                = bar         # <-- output "bar" as additional class for the div
            = " data-co="#{i}">  # <-- indentation back, I want an output of the rest 
      </div>
</body> # <-- 17th line

</html> # <-- 19th line, the last element

Логически все в порядке. Все отступы и = и - соблюдены. Но я получаю сообщение об ошибке:

!! Unexpected error while processing request: tmpl.slim:16: syntax error, unexpected keyword_end, expecting ')
'
; end; _buf << ("</div>");
     ^
tmpl.slim:17: syntax error, unexpected keyword_end, expecting ')'
; end; _buf << ("</body>"\
     ^
tmpl.slim:22: syntax error, unexpected keyword_end, expecting ')'
end;end;end;end

У меня есть два вопроса:

1) Можно ли в Slim полноценно использовать синтаксис html?

2) Как я могу решить свою проблему?


person Green    schedule 07.04.2013    source источник
comment
Какая строка является строкой 16?   -  person thank_you    schedule 08.04.2013


Ответы (1)


Я думаю, вы думаете, что это неправильный путь. Если ваша конечная цель состоит в том, чтобы создать два типа открывающих тегов на основе одного условия, тогда будет работать простой оператор if else, что вы и сделали. Но из-за того, что вы писали в несколько строк в открывающем HTML-теге, SLIM взбесился. Попробуйте это и дайте мне знать, что происходит.

<body>
  - (1..5).each do |i|   
     - if i.eql? 2
       <div class="foo"> 
     - else
       <div class="foo bar" data-co="#{i}">   
     </div>
</body>
person thank_you    schedule 07.04.2013
comment
Да, это работает! :) Теперь я вижу разницу. Я хотел добавить только имя класса без дублирования строки <div>...</div>. Теперь я вижу, как это решить. Спасибо. - person Green; 08.04.2013