0

ユーザーが情報を入力するフォームがあります (テキスト ボックス、選択ボックス)。フォーム内には、ユーザーが保存せずに行ったことをプレビューできる link_to "Preview" があります。彼らは、私がすでに持っている別のコントローラーのビューでそれをプレビューできます。これを行う方法についてのアドバイスは大歓迎です。js と ajax で試してみましたが、うまくいきませんでした。フォームパラメータをlink_toに渡す方法が一番の問題だと思います。Ruby on Rails 3.2、jQuery、JavaScript を使用しています。ありがとう。

ここにいくつかのコードがあります。ユーザーが [プレビュー] をクリックした後にプレビューかどうかをチェックする 2 番目のコントローラー:

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 url = '/' + "?access_token=" + access_token + "&title=" + title + "&body=" + body;
window.open(url, '_blank');

イベントでは、http://api.jquery.com/event.preventDefault/clickを使用する必要があります。e.preventDefault()

ただし、他の人が指摘しているように、新しいプレビュー ページを要求してサーバーにアクセスする必要はありません。BootstrapModalや jQuery UIなどを使用Dialogして、同じページに「ポップアップ」を作成することを検討する場合があります。モーダル コンテンツは、設定したプレビュー ページと非常に似ていますが、titlebodyによって提供されvar title = $("#title").val();ます。

于 2013-08-02T13:34:48.153 に答える