Rails 3.1实时预览

时间:2011-09-18 16:42:33

标签: jquery ruby-on-rails ajax coffeescript markitup

我想在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

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

2 个答案:

答案 0 :(得分: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()))

注意它没有消毒!

答案 1 :(得分:0)

您已指定"script"作为数据类型,将响应作为JavaScript运行。通过写:

检查响应是否正确
$.post('posts/preview', $('#post_content').val(), ((js) -> console.log js), "script")

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