2

我想要一个类似于 stackoverflow 上的实时预览。使用 Rails 3.1 和 RedCloth,我似乎无法理解如何使其工作。

我尝试制作自己的 Ajax 调用,例如(在我的 posts.js.coffee 中)

$ ->
 $('#post_content').keyup ->
  $.post('posts/preview', $('#post_content').val(), null, "script")

并在控制器内部具有功能

def preview
 @content = params[:post_content]

 respond_to do |f|
  f.js
 end
end

在 preview.js.erb 我放

$("#preview").html("<% raw RedCloth.new(@content).to_html %>");

我添加了资源

resources :post do
 post 'preview', :on => :collection
end

但它不起作用。有什么建议么?

4

2 回答 2

3

感谢大家的智慧之言,最终我按照你们所说的做了,因为在客户端解析预览要明智得多。我切换到 Markdown 解析器(服务器端)bluecloth 2.1.0

gem "bluecloth", "~> 2.1.0"

至于客户端解析器,我使用了PageDown

然后我只需要添加一个小片段即可使其工作。

converter = new Markdown.Converter()
$ ->
  if $('#post_content').val() isnt ''
   $('.preview').empty().append(converter.makeHtml($('#post_content').val()))
$ ->
  $('#post_content').keyup ->
    $('.preview').empty().append(converter.makeHtml($('#post_content').val()))

注意它没有消毒!

于 2011-09-19T21:15:46.133 回答
0

您已将"script"数据类型指定为应该使响应以 JavaScript 运行的数据类型。通过写入检查响应是否正确:

$.post('posts/preview', $('#post_content').val(), ((js) -> console.log js), "script")

"script"数据类型方法有一些重要的注意事项。正如jQuery.ajax文档所说,“这会将 POST 转换为远程域请求的 GET。” 我假设这是同域请求,但这值得牢记。

于 2011-09-18T17:14:41.827 回答