2013-08-02 6 views
0

У меня есть форма, в которой пользователь вводит некоторую информацию (текстовые поля, поле выбора). Внутри формы у меня есть link_to «Preview», где пользователи могут просматривать, что они сделали, не сохраняя его. Они могут просмотреть его в виде другого контроллера, который у меня уже есть. Любые советы о том, как это сделать, будут высоко оценены. Я пробовал с js и ajax, но это не сработало. Я думаю, что самая большая проблема заключается в том, как передать параметры формы в link_to. Я использую Ruby on Rails 3.2, jQuery, JavaScript. Благодарю.Кнопка предварительного просмотра формы в другом виде

Вот несколько кодов. Во втором контроллере, который проверяет, если это предварительный просмотр или нет после того, как пользователь нажимает Предварительный просмотр:

def index 
    if !params[:access_token].nil? 
    @p = "something" 
    @m.access_token = params[:access_token] 
    @m.title = params[:title] 
    @m.body = params[:body] 
    else 
    @p = "something else" 
    end 
    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

Вид (первый, где форма и кнопка предварительного просмотра) в Haml + JS, index.html.haml:

= form_for [:controller, @m], action: action, html: { multipart: true, id: "some_id" }, method: :post, remote: true do |f| 
    - @access_token = generate_access_token 
    = hidden_field_tag :access_token, @access_token 

    .input-prepend 
    %span.add-on Title 
    = f.text_field :title, id: "title" 

    .input-prepend 
    %span.add-on Body 
    = f.text_area :body, id: "body" 

    = f.submit t("save"), class: "btn btn-primary" 
    = link_to "Preview", " ", id: "preview", target: "_blank", class: "btn" 

:javascript 
    $("#preview").click(function(e) { 

    var title = $("#title").val(); 
    var body = $("#body").val(); 
    var access_token = $("#access_token").val(); 

    $.get('/' + "?access_token=" + access_token + "&title=" + title + "&body=" + body); 
    }); 

Этот .get, вероятно, не имеет смысла, поскольку он должен открываться в новой вкладке и новом виде.

+0

Пожалуйста, вы можете добавить код или изображения? –

+0

Необходимо увидеть код, который вы уже пробовали, вам не нужен AJAX, вам не нужно обращаться к серверной стороне, так как только значения элементов DOM должны отображаться на странице, как есть, достаточно простого JS – rps

+0

Некоторый код ... pleaze – grigno

ответ

0

Если вы действительно хотите, чтобы открыть предварительный просмотр в новой вкладке/окне, вы можете просто изменить свою последнюю строку:

var url = '/' + "?access_token=" + access_token + "&title=" + title + "&body=" + body; 
window.open(url, '_blank'); 

В вашем click случае вы хотите e.preventDefault(): http://api.jquery.com/event.preventDefault/.

Однако, как отмечали другие, вам действительно не нужно ударять по серверу, запросив новую страницу предварительного просмотра. Вы можете использовать что-то вроде Modal Bootstrap или jQuery UI's Dialog, чтобы создать «всплывающее окно» на той же странице. Модальное содержимое будет очень похоже на страницу предварительного просмотра, которую вы настроили, но с title и body, предоставленными, например. var title = $("#title").val();.

0
var preview= window.open('/',title,'height=500,width=500'); 
preview.document.write(body); //you can write html code in it, your script vars in it 

reference

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