【问题标题】:Textarea adding extra spaces on form submit with Sinatra/Datamapper when using <code> and <pre>使用 <code> 和 <pre> 时使用 Sinatra/Datamapper 在表单提交上添加额外空格的 Textarea
【发布时间】:2012-12-20 06:43:36
【问题描述】:

所以我正在使用 Sinatra 和 Datamapper 为我的投资组合网站 (http://erickel.ly) 创建自己的 CMS/博客。一切都很顺利,直到我开始写我的第一篇实际帖子并且我需要显示一些代码。我的第一个猜测是,当我将源代码粘贴到用于输入每个帖子内容的文本区域时,只需使用代码和预标记包装源代码。它工作正常,但第一行之后的每一行都以大量不属于的额外空格开头。

这是帖子类:

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 =&gt; 1024, :format =&gt; :url
  property :short_url,  String, :key =&gt; 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>

我们提交表单后,文本区域中的数据被保存,但有额外的空格。当我回到显示帖子“正文”的当前值的编辑页面时,显示的是这样的:

<code>
                  <pre>class Link
                    include DataMapper::Resource

                    property :long_url,   String, :length => 1024, :format => :url
                    property :short_url,  String, :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>

如果我再次提交包含该值的表单,则每行的开头会添加更多额外的空格。我不知道如何防止这种情况,但它真的让我失望。任何帮助将不胜感激!

-埃里克

【问题讨论】:

    标签: textarea sinatra form-submit datamapper removing-whitespace


    【解决方案1】:

    在阅读 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 }
    

    我还没有注意到任何负面影响。

    【讨论】:

      【解决方案2】:

      而不是写

      %textarea(name="body" rows="10" cols="40")
          = @post.body
      

      删除换行符并重写如下:

      %textarea(name="body" rows="10" cols="40")= @post.body
      

      仅此而已,您无需执行任何其他操作。我遇到了类似的问题,花了一个多小时才搞定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-03
        • 2019-12-26
        • 2016-10-26
        • 2011-05-10
        相关资源
        最近更新 更多