我想在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
但它不起作用。 有什么建议吗?
答案 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以获取远程域请求。”我假设这是一个同域请求,但值得记住。