2009-06-09 38 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