问题描述
||
因此,我正在使用Sinatra和Datamapper为我的投资组合网站(http://erickel.ly)制作自己的CMS /博客。一切顺利,直到我写了第一篇实际文章,并且需要显示一些代码。我的第一个猜测是,当我将源代码粘贴到用于输入每个帖子内容的文本区域中时,仅将源代码与代码和pre标签一起包装起来。它工作正常,但第一行之后的每一行都以大量不属于的多余空格开头。
这是帖子类:
class Post
include DataMapper::Resource
property :id,Serial
property :title,String
property :slug,String
property :body,Text
property :created_at,DateTime
property :updated_at,DateTime
end
这是帖子内容表单的文本区域:
%label(for=\"body\") Body:
%textarea(name=\"body\" rows=\"10\" cols=\"40\")
= @post.body
这是我要输入的文本区域:
<code>
<pre>class Link
include DataMapper::Resource
property :long_url,String,:length => 1024,:format => :url
property :short_url,:key => true
property :created_at,DateTime
def self.gen_short_url
# Create an Array of possible characters
chars = (\'a\'..\'z\').to_a + (\'A\'..\'Z\').to_a + (\'0\'..\'9\').to_a
tmp = chars[rand(62)] + chars[rand(62)] + chars[rand(62)]
while Link.get(tmp)
puts \"Tried \" + tmp
tmp = chars[rand(62)] + chars[rand(62)] + chars[rand(62)]
puts \"tmp is Now \" + tmp
end
tmp
end
end</pre>
</code>
提交表单后,将保存文本区域中的数据,但要保留额外的空格。当我返回到编辑页面时,该页面显示帖子的“ body”的当前值,显示如下:
<code>
<pre>class Link
include DataMapper::Resource
property :long_url,:length => 1024,:format => :url
property :short_url,:key => true
property :created_at,DateTime
def self.gen_short_url
# Create an Array of possible characters
chars = (\'a\'..\'z\').to_a + (\'A\'..\'Z\').to_a + (\'0\'..\'9\').to_a
tmp = chars[rand(62)] + chars[rand(62)] + chars[rand(62)]
while Link.get(tmp)
puts \"Tried \" + tmp
tmp = chars[rand(62)] + chars[rand(62)] + chars[rand(62)]
puts \"tmp is Now \" + tmp
end
tmp
end
end</pre>
</code>
如果我再次提交带有该值的表单,则会在每行的开头添加更多的空格。我不确定如何避免这种情况,但这确实使我失望。任何帮助,将不胜感激!
-埃里克
解决方法
在阅读创建Compass的人的这篇博客文章时,我遇到了自己问题的答案。 http://chriseppstein.github.com/blog/2010/02/08/haml-sucks-for-content/
该问题必须归因于HAML在将换行符添加到文档之前尝试保留换行符的方式。有关HAMl处理空白的方式的更多信息,请访问http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#whitespace_preservation
我解决问题的方法是关闭HAML使HTML变得漂亮的尝试,根据Chris Eppstein的说法,这也将使HAML渲染速度提高两倍。我通过将以下内容添加到我的主要ruby文件中来做到这一点:
set :haml,{ :ugly => true }
我还没有注意到任何负面因素。
, 代替写作
%textarea(name=\"body\" rows=\"10\" cols=\"40\")
= @post.body
删除换行符,然后像这样重写:
%textarea(name=\"body\" rows=\"10\" cols=\"40\")= @post.body
仅此而已,您无需执行其他任何操作。我遇到了类似的问题,花了一个多小时使它生效。