Ruby on Rails 中的 HAML 能否以"ordered hash"方式输出 HTML 属性?



例如,如果使用haml:

%html{'xmlns' => "http://www.w3.org/1999/xhtml",
      'xmlns:og' => "http://ogp.me/ns#",
      'xmlns:fb' => "http://www.facebook.com/2008/fbml"}

输出为:

<html xmlns:fb='http://www.facebook.com/2008/fbml' xmlns:og='http://ogp.me/ns#' xmlns='http://www.w3.org/1999/xhtml'> 

这是不同的顺序。 有没有办法按照指定的顺序制作?

(它使用的是Ruby 1.9.2和Rails 3.0.6)

更新 1:虽然在 HTML 中,属性的顺序无关紧要,但在某些情况下,我只想遵循规范所说的。 谁知道他们的解析器做了什么,以及它是否使用一些正则表达式来做遵循规范的人会匹配的事情,但不遵循规范将不匹配,因为他们使用正则表达式进行解析的"错误"。

更新2:或者,如果在一般情况下有其他东西怎么办? 它不需要是 HTML 属性。 它可以是任何顺序重要的事物。

我会指出 HTML 中的参数是无序的,所以不清楚你为什么会关心这个。

如果你真的想保持顺序,你可以使用备用的 HAML 语法:

%html(xmlns="http://www.w3.org/1999/xhtml"
  xmlns:og="http://ogp.me/ns#"
  xmlns:fb="http://www.facebook.com/2008/fbml")

编辑:替代语法给出相同的结果。 goto "arguments_are_orderless"

如果您

自己从帮助程序函数生成实际的 HTML 字符串,则可以。

def html_with_ns
  '<html xmlns="...">'
end

然后

=html_with_ns

在模板中。不是很有吸引力,但也许这就是在这种情况下完美的代价。

你可能会争辩说这不应该是必需的,因为哈希实际上是在 Ruby 1.9 中排序的(请参阅下面的评论,我不知道是这种情况)。也许 Haml 在 1.9 以下运行时不对哈希进行排序的补丁可能是有序的......

最新更新