2009-06-09 37 views
5

我试图切换到使用HAML作为我的意见,但我不断收到意想不到的KENSURE消息。我用html2haml来切换工作视图文件。首先运行它告诉我,我不需要html2haml在其输出中的结尾,所以我删除了它,现在我得到的错误看起来像是抱怨表单没有被结束。Rails HAML转换问题 - 意外kENSURE,期待kEND

我在做什么错?

错误消息:

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 

和会话/ 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 

回答

13

这事确实HAML你当”已经让你的间距错了。 html2haml会为您完成大部分工作,但您仍然需要查看更改。在会话/ new.html.haml的问题是,你开始一个DO块,没有内容:该do块内

- form_tag session_path do 
%fieldset 

整个字段集应该被嵌套(缩进)。因为没有内容可言,HAML不能放在一个end声明,因此当文件被解释,您可以:

unexpected $end, expecting kEND 

意思是“我打的文件($结束)结束,我期待结束关键字(kEND)“

+1

这就是解决方案,但我认为这调试会话已经完全把我关HAML的。与必须处理难以理解的空白分析错误相比,关闭几个括号是无关紧要的。按钮类也需要缩进,meta标签被HTML2HAML转换成ruby哈希值。太多的奇怪怪癖在这个DSL我喜欢 – srboisvert 2009-06-09 19:05:15

1

如图所示,第一个块的%body缩进了一个比%head更多的水平,而%head与%html的水平相同,都不是很好。如果它有效,你可能会得到像

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

我认为大多数浏览器会窒息! ;-)

一般来说,我不喜欢html2haml,尽管它努力尝试似乎无法处理所有事情。除非你有大量的视图文件,否则我倾向于花时间手动修改文件。你不必一次完成它们,为什么不把它们翻译成你正在做的?您也将以这种方式了解更多关于HAML的知识。足够 - 希望 - 你会发现整个缩进的东西变得本能,之后进展开始加速。

1

HAML的行为真的很差,像tab这样的问题,而不是空白和不正确的缩进。

我的解决方法(至少在使用TextMate的OSX上)是使用TextMate,具有HAML/SASS bundle installed。然后,我使用CMD- [取消缩进文本,然后按CMD-]正确重新缩进文本。这消除了任何看不见的标签和不正确的缩进,并显示出任何结构性问题。

0

一个未被使用的功能是html2haml的ERB模式。

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

只需使用-e会得到你的HAML约95%的方式出现,而不是50%使用纯html2haml