2

我有一个带有此文档类型的页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">

现在将其转换为苗条模板格式,bu slim 在预设中没有这样doctype的东西,我怀疑应该有办法指定自定义一个。现在我使用|

|<!DOCTYPE html PUBLIC "...skip...>
html
 ....

但它在行后没有换行符呈现doctype

<!DOCTYPE html PUBLIC "...skip...><html ...

哪个是不受欢迎的,有什么方法可以将它们放在不同的行上?

4

2 回答 2

2

要在模板中的任何位置插入换行符,只需添加以下行:

= "\n"

Slim 中的“=”命令执行给定的 Ruby 代码并将其附加到缓冲区。在这种情况下,Ruby 代码只是一个换行符。

于 2012-11-29T21:01:50.367 回答
1

你不需要这个|字符,Slim 允许内联 HTML直接包含 HTML,并且包括 doctypes。虽然这对格式化没有帮助,但它之后仍然没有换行符。

文档类型实际上是在Slim 使用的Temple 中管理的。您可以更改它以添加自定义文档类型以获得您想要的行为。这确实涉及弄乱 Temple 的内部数据,因此您需要小心一点,尤其是在升级时,因为内部结构可能已经改变。

有问题的散列已被冻结,因此您不能只向其中添加新条目。但是,您可以dup向重复的哈希添加一个条目,并将新的哈希分配回常量。这将导致 Ruby 生成警告,因为您通常不应该以这种方式重新分配常量。

new_hash = Temple::HTML::Fast::XHTML_DOCTYPES.dup
new_hash['rdf'] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">'
Temple::HTML::Fast::XHTML_DOCTYPES = new_hash

现在您可以像使用rdfSlim 中的预定义文档类型一样使用它。

doctype rdf
html

这会产生:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html></html>

如果您想避免看到警告,请在更改常量之前设置$VERBOSEnil(确保之后将其更改回来)。

begin
  old_verbose, $VERBOSE = $VERBOSE, nil
  Temple::HTML::Fast::XHTML_DOCTYPES = new_hash
ensure
  $VERBOSE = old_verbose
end

(你可以把它变成一个接受块的方法。如果你使用的是 Rails,它已经为你完成了silence_warnings。)

于 2012-11-29T21:16:31.070 回答