Pergunta

Eu estou tentando passar a usar HAML para os meus pontos de vista, mas eu continuo recebendo mensagens KENSURE inesperados. Eu usei html2haml para mudar arquivos de visão de trabalho. Primeira execução por ele me disse que eu não precisava a fim de que html2haml tinha em sua saída assim que eu removi-lo e agora eu recebo erros que olhar como ele está reclamando sobre a forma não está sendo terminado.

O que estou fazendo de errado?

mensagem de erro:

compile error
app/views/sessions/new.html.haml:20: syntax error, unexpected kENSURE, expecting kEND
app/views/sessions/new.html.haml:22: syntax error, unexpected $end, expecting kEND

application.html.haml:

!!!
%html
%head
  %title
    = APP_CONFIG[:site_name] + ': ' + @page_title  
  == <meta http-equiv="content-type" content="text/xhtml; charset=utf-8" />
  == <meta http-equiv="imagetoolbar" content="no"  />
  == <meta name="distribution" content="all" />
  == <meta name="robots" content="all"  />
  == <meta name="resource-type" content="document" />
  == <meta name="MSSmartTagsPreventParsing" content="true"   />
  = stylesheet_link_tag 'base'
  = javascript_include_tag :defaults

  %body
    #container
      #header
        - if logged_in?
          = link_to 'Logout', logout_path
        - else
          = link_to 'Login', login_path
          = link_to 'Signup', signup_path
      #content
        = flash_messages
        = yield :layout

e sessões / new.html.haml

= title "Login", :h2
- form_tag session_path do
%fieldset
  %legend
    Your Details
  %ol
    %li
      = label_tag 'login', 'Username'
      = text_field_tag 'login', @login
    %li
      = label_tag 'password'
      = password_field_tag 'password', nil
    %li
      = label_tag 'remember_me', 'Remember me'
      = check_box_tag 'remember_me', '1', @remember_me
.buttons
  = submit_tag 'Login'
  = link_to 'Forgotten Password', forgot_password_path
Foi útil?

Solução

Isso é algo haml faz quando você começou a sua errado espaçamento. html2haml faz a maioria do trabalho para você, mas você ainda tem que rever as alterações. O problema em sessões / new.html.haml é que você está começando a fazer bloco com nenhum conteúdo:

- form_tag session_path do
%fieldset

Todo o conjunto de campos deve ser aninhado (recuado) dentro desse bloco do. Porque não há nenhum conteúdo em tudo, haml não consegue colocar em uma declaração end, então quando o arquivo é interpretado, você obtém:

unexpected $end, expecting kEND

significa "eu bati o final do arquivo ($ end), eu estava esperando a palavra-chave final (Kend)"

Outras dicas

Tal como mostrado, a primeira parte tem% corpo recuado um nível mais do que a cabeça%, e cabeça% no mesmo nível como% html, nenhum dos quais é boa. Se funcionar, você pode obter algo como

<html>
</html>
<head>
  ...
  <body>
  ...
  </body>
</head>

Eu acho que a maioria dos navegadores vai engasgar com isso! ; -)

Em geral, eu não sou um fã de html2haml, que embora se esforça não parece ser capaz de lidar com tudo. A menos que você tem um sério grande pilha de arquivos de visão, eu estaria inclinado a gastar o tempo refazendo os arquivos manualmente. Você não tem que fazê-los todos de uma vez, porque não basta traduzi-los como você vai? Você vai aprender muito mais sobre HAML dessa forma também. O suficiente para que - espero -. Você vai encontrar todo o recuo coisa se torna instintiva, após o qual o progresso começa a acelerar

HAML se comporta muito mal com problemas como guias em vez de espaços em branco, e recuo incorreta.

Minha solução (pelo menos no OSX usando TextMate) é usar TextMate, têm o HAML / SASS bundle instalado . Então eu uso cmd- [para desfazer o recuo do texto, seguindo por cmd-] para re-indent o texto corretamente. Que se livrar de quaisquer guias invisíveis e recuo incorreta, mais revela problemas estruturais.

Um recurso subutilizado é o modo ERB de html2haml.

html2haml -e < input.html > output.html.haml

Apenas usando -e vai ter o seu HAML cerca de 95% do caminho até lá, em vez de 50% usando html2haml puro

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top