5

Rails 3 アプリのブートストラップ モーダルに問題があります。現在、DB を送信して更新するレビュー フォームは問題なく処理されますが、フォームが送信されても​​モーダルは閉じません。これをフォーム送信ボタンに追加しようとしました:

:data => {:dismiss => "modal"}

ただし、更新アクションを実行せずにモーダルを閉じます。これが私のモーダルコードです。

<!-- Review Modal -->
<% if current_user == nil %>
<% else %>
<div id="reviewModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="reviewModalLabel" aria-hidden="true">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3 id="reviewModalLabel">Write a review</h3>
  </div>
  <div class="modal-body">
  <%= form_for(review_ballot, :remote => true, :html => {:class => 'review_ballot'}) do |f| %>
    <h4>Your score:</h4>
    <%= f.label("score_1", content_tag(:span, '1'), {:class=>"review", :id=>"1"}) %>
    <%= radio_button_tag("review[score]", 1, current_user_review == 1, :class => 'review_button')%>
    <%= f.label("score_2", content_tag(:span, '2'), {:class=>"review", :id=>"2"}) %>
    <%= radio_button_tag("review[score]", 2, current_user_review == 2, :class => 'review_button')%>
    <%= f.label("score_3", content_tag(:span, '3'), {:class=>"review", :id=>"3"}) %>
    <%= radio_button_tag("review[score]", 3, current_user_review == 3, :class => 'review_button')%>
    <%= f.label("score_4", content_tag(:span, '4'), {:class=>"review", :id=>"4"}) %>
    <%= radio_button_tag("review[score]", 4, current_user_review == 4, :class => 'review_button')%>
    <%= f.label("score_5", content_tag(:span, '5'), {:class=>"review", :id=>"5"}) %>
    <%= radio_button_tag("review[score]", 5, current_user_review == 5, :class => 'review_button')%>
  <br />
    <h4>What'd you think?</h4>
  <%= f.text_area :review_text, :rows => 3, :cols => 10 %>
  <%= hidden_field_tag :venue_id, @venue.id %>
  </div>
  <div class="modal-footer">
    <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
    <%= submit_tag "Save review", :class => "btn btn-warning" %>
    <% end %>
  </div>
</div>

そして、これが review_ballot メソッドの会場ヘルパーです。

module VenuesHelper
  def review_ballot
    if @review = current_user.reviews.find_by_venue_id(params[:id])
      @review
    else
      current_user.reviews.new
    end
  end

  def current_user_review
    if @review = current_user.reviews.find_by_venue_id(params[:id])
      @review.score
    else
      "N/A"
    end
  end
end

私は今何をしようか途方に暮れています。私はグーグルで検索しましたが、運がありませんでした。これを修正するにはどうすればよいですか?

編集:私の一時的な解決策 -:remote => trueモーダルから削除し、コントローラー アクションで訪問者をリダイレクトしたので、無視されることを心配する必要はありません。

それは明らかに不格好/ハッキーなので、誰かがこれを解決するのを手伝ってくれるなら、私はまだそれが大好きです. オンデマンドでより多くのコード/情報を提供したいと考えています。

4

2 に答える 2

3

あなたの場合、あなたは画像をアップロードしていないということです。したがって、単純に ajax 呼び出しを実行して送信することができます。ここに簡単なコードがあります

$(document).ready(function(){

  $('#submit_button_id').click(function() {  
    var valuesToSubmit = $("#form_id").serialize();
    $("#modal_id").modal('hide') ;

    $.ajax({
      url: "/controller/method",
      data: valuesToSubmit,
      type: "POST/GET/PUT"
      }).success(function(data, status){
        $("#id_if_div_where_you_want_to_show_updated_data").html( data );
    });

    return false; 
  });
});

編集済み

コントローラーメソッドは次のようになります

def method
  Do what you want to do
  @object = Model.some_queries
  render :template => "path_to_view_file like controller_name/method_name", :layout => false
end
于 2012-12-28T04:17:54.593 に答える
0

submit をhidden.bs.modalイベントにバインドすることで、この問題を回避しました。

$('#modal_id').on('hidden.bs.modal', function() {
    $('form').submit();
    form_submitted = false;
});

return false;ボタンのクリック時にフォームが送信されないようにするには、フォームの onclick イベントで使用できます。

<%= submit_tag 'Save review',
               class: 'btn btn-warning',
               :data => { :dismiss => 'modal' },
               :onclick => "form_submitted = true; return false;" %>

編集:

onclick イベントに追加form_submitted = trueされたため、他の終了条件ではなく、送信時にモーダルが閉じられたことがわかります。が呼び出されると、false にリセット$('form').submit()されます。この変数を JavaScript ファイルに追加します。最初は false です。

于 2014-02-20T14:04:53.790 に答える