【问题标题】:Rails HAML conversion problems - unexpected kENSURE, expecting kENDRails HAML 转换问题 - 意外的 kENSURE,期待 kEND
【发布时间】:2009-06-09 17:14:46
【问题描述】:

我正在尝试切换到使用 HAML 来查看我的视图,但我不断收到意外的 KENSURE 消息。我使用 html2haml 来切换工作视图文件。第一次运行它告诉我我不需要 html2haml 在其输出中的结尾,所以我删除了它,现在我得到的错误看起来像是在抱怨表单没有结束。

我做错了什么?

错误信息:

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

【问题讨论】:

    标签: ruby-on-rails haml


    【解决方案1】:

    当你的间距错误时,haml 会这样做。 html2haml 为您完成了大部分工作,但您仍然需要查看更改。 session/new.html.haml 中的问题是您正在启动一个没有内容的 do 块:

    - form_tag session_path do
    %fieldset
    

    整个字段集应该嵌套(缩进)在该do 块中。因为根本没有内容,haml 无法放入 end 声明,所以当文件被解释时,你会得到:

    unexpected $end, expecting kEND
    

    意思是“我到达了文件的结尾($end),我期待的是结束关键字(kEND)”

    【讨论】:

    • 这就是解决方案,但我认为这个调试会话完全让我远离了 HAML。与必须处理难以理解的空白解析错误相比,关闭几个括号是无关紧要的。按钮类也需要缩进,并且元标记通过转换为 ruby​​ 哈希值被 HTML2HAML 破坏。我喜欢这个 DSL 中有太多奇怪的怪癖
    • 很遗憾听到这个消息。我赞同 Mike Woodhouse 的建议,即尝试手动转换文件 - 空白的东西确实很快就变得本能了。不过,即使您确实放弃了 Haml,您也似乎在 html2haml 中发现了一些错误,所以我很想看看您的输入文件以便我修复它们。
    【解决方案2】:

    如图所示,第一个块的 %body 比 %head 缩进了一级,而 %head 与 %html 处于同一级,两者都不好。如果它有效,你可能会得到类似的东西

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

    我认为大多数浏览器都会对此感到窒息! ;-)

    总的来说,我不是 html2haml 的粉丝,虽然它很努力,但似乎无法处理所有事情。除非您有大量的视图文件,否则我倾向于花时间手工修改文件。您不必一次全部完成,为什么不直接翻译它们呢?您也可以通过这种方式了解更多有关 HAML 的信息。够了——希望——你会发现整个缩进变得本能了,之后进展开始加速。

    【讨论】:

      【解决方案3】:

      HAML 在处理制表符而不是空格以及不正确的缩进等问题时表现得非常糟糕。

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

      【讨论】:

        【解决方案4】:

        一个未被充分利用的特性是 html2haml 的 ERB 模式。

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

        仅使用 -e 将获得大约 95% 的 HAML,而不是使用纯 html2haml 的 50%

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-10
          相关资源
          最近更新 更多