0

我有一个表单,用户可以在其中输入一些信息(文本框、选择框)。在表单中,我有一个链接到“预览”,用户可以在其中预览他们所做的事情而无需保存。他们可以在我已经拥有的另一个控制器的视图中预览它。任何有关如何做到这一点的建议将不胜感激。我尝试使用 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 可能没有意义,因为它必须在新选项卡和新视图中打开。

4

2 回答 2

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

参考

于 2013-08-02T14:43:01.310 回答
0

如果您真的想在新选项卡/窗口中打开预览,您可以将最后一行更改为:

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

在您的click活动中,您需要e.preventDefault()http ://api.jquery.com/event.preventDefault/ 。

但是,正如其他人所指出的,您实际上并不需要通过请求新的预览页面来访问服务器。您可能会考虑使用 BootstrapModal或 jQuery UI 之类的东西Dialog在同一页面上创建“弹出窗口”。模态内容与您设置的预览页面非常相似,但由 eg 提供title和。bodyvar title = $("#title").val();

于 2013-08-02T13:34:48.153 回答