2011-09-18 5 views
2

Я хотел бы иметь предварительный просмотр в прямом эфире, аналогичный показанному здесь в stackoverflow. Использование Rails 3.1 и RedCloth, я не могу понять, как заставить его работать.Rails 3.1 live preview

Я попытался сделать свой собственный вызов 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

У Ajax будет слишком много латентности для предварительного просмотра, такого как Stack Overflow. Что вы хотите, так это библиотека меток JavaScript. См. Http://stackoverflow.com/questions/134235/is-there-any-good-markdown-javascript-library-or-control (обратите внимание, что вы также можете запустить ту же самую библиотеку разметки на сервере с помощью ExecJS, которая, конечно же, поставляется в комплекте с Rails 3.1.) –

+1

Я считаю, что этот вопрос связан: http://stackoverflow.com/questions/5311247/rails-ajax-js-erb-rendered-as-text-not-js –

+0

В будущем Гай , было бы разумно включить некоторую отладочную информацию. * Почему * это не работает или что * делает * это делает это неожиданно? – coreyward

ответ

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())) 

уведомление не подвергается дезинфекции!

+0

эй Гай .. Я пытаюсь сделать то же, что и ты. Я обнаружил, что использование этого синтаксического анализа велико! ЗА ИСКЛЮЧЕНИЕМ, когда я пишу convert.makeHtml (string) в файл, например main_file.js, он вызывает другие скрипты, которые запускаются позже, чтобы не работать. Вы находили это когда-либо? – jay

0

В качестве типа данных вы указали "script", который должен сделать отклик выполненным JavaScript. Проверьте, правильно ли в письменной форме ответа:

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

Есть несколько важных предостережений с подходом типа "script" данных. Как отмечают документы jQuery.ajax, «это превратит POST в GET для запросов удаленного домена». Я предполагаю, что это запрос с одним доменом, но это стоит иметь в виду.

 Смежные вопросы

  • Нет связанных вопросов^_^